C#MVC中实现命令模式的几个问题
我希望这是直截了当的。我正在尝试在我正在制作的MVC应用程序中实现命令模式。我看到的唯一问题是命令对象的数量非常多 我有11个表,每个表大约有20个字段需要更新 我的问题是每个字段是否需要一个不同的对象 这是一个医疗保健应用程序,让我举一个例子。 我有一张名为KeyHospital的表,这个表存储医院信息,并且只存储我们医院客户的医院信息。我已经使用Linq to SQL连接到数据库。KeyHospital手术台可能是迄今为止最大的手术台。我所做的是为每个字段创建一个新对象C#MVC中实现命令模式的几个问题,c#,model-view-controller,command,C#,Model View Controller,Command,我希望这是直截了当的。我正在尝试在我正在制作的MVC应用程序中实现命令模式。我看到的唯一问题是命令对象的数量非常多 我有11个表,每个表大约有20个字段需要更新 我的问题是每个字段是否需要一个不同的对象 这是一个医疗保健应用程序,让我举一个例子。 我有一张名为KeyHospital的表,这个表存储医院信息,并且只存储我们医院客户的医院信息。我已经使用Linq to SQL连接到数据库。KeyHospital手术台可能是迄今为止最大的手术台。我所做的是为每个字段创建一个新对象 public cla
public class ChangeHospitalDEA : ICommand
{
public ChangeHospitalDEA(int id, string newDEA)
{
var Thishospital = (from Hospital in _context.Keyhospitals
where Hospital.ID == id
select Hospital).Single();
Thishospital.DEAnum = newDEA;
}
}
我将ICommand作为抽象类
public abstract class ICommand
{
public AllkeysDataContext _context = new AllkeysDataContext();
public void Execute()
{
_context.SubmitChanges();
}
}
我这样做对吗?我只是觉得我正在为此编写大量代码,这是我第一次使用命令模式。太精细了。相反,您应该为诸如插入新实体(一个或多个相关对象的图形)更新实体等操作定义命令
只要您想执行某个操作,就会使用命令。在某些情况下,更改单个字段可能构成操作,例如返回附加数据或提供建议。例如,通过AJAX调用验证输入的地址。而且,
ICommand
对于基本抽象类来说是一个糟糕的名称选择ICommand
是命令体系结构的通用接口。(按照惯例,“I”前缀是为接口名称保留的。)我主要与MVVM打交道,但我怀疑MVC已经有了一个通用的命令界面。这可能不是您想要听到的,但我会将您的用户界面重组为基于任务的UI,并将您的UI构建为通用任务,例如更改缉毒管理局编号,这些任务可以随着时间的推移而细化时间
如果您有现有的分析,您会注意到某些字段只会一起更改,并且这些字段可以逻辑地分组到常见任务中
我还认为,在构造函数中隐藏数据库调用是一种不好的做法,它会将linq语句移动到Execute方法,让ctor只初始化公共属性或私有字段,并让这些字段在Execute方法中使用
将查询移动到execute方法中的主要原因是为了减少出现任何乐观并发错误的机会
此外,我还觉得调用基类ICommand不是一个好的做法,可能会导致将来的混乱,建议您再次调用CommandBase或将其更改为接口。我相信MVCContrib内置了一些命令接口,我永远不需要插入任何东西,我只需要用新信息更新字段。我把它分解为能够更改每个字段,因为很多时候用户只需要更改一个字段。我相信我的应用程序中的每一个领域都可能自行改变。我确实让ICommand命名了其他名称,但随后注意到intellisense没有拾取任何ICommand,我将再次将其更改为其他名称以修复此问题。此外,它最初是一个接口,但我将其更改为一个抽象类。谢谢你的帮助+1.我在WinForms应用程序中使用MVC模式,并使用数据绑定更新模型。模型类用作对象数据源。非常方便。不需要任何命令来更新单个字段。