我希望这是直截了当的。我正在尝试在我正在制作的MVC应用程序中实现命令模式。我看到的唯一问题是Command对象的数量非常多。
我有11个表,每个表有大约20个需要更新的字段。
我的问题是我是否需要为每个字段设置不同的对象?
这是一个医疗保健应用程序,所以让我举一个例子。 我有一个名为KeyHospital的表,此表存储医院信息,仅存储医院客户的医院信息。我已经使用Linq to SQL来连接数据库。就字段而言,KeyHospital表可能是最大的表。我所做的是为每个字段创建一个新对象。
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();
}
}
我这样做是对的吗?我只是觉得我为此写了很多代码,这是我第一次使用命令模式。
答案 0 :(得分:1)
过于细化。相反,您应该为操作定义命令,例如插入新实体,(一个或多个相关对象的图形)更新实体等。
只要您想执行某个操作,就会使用命令。在某些情况下,更改单个字段可能构成一个操作,例如返回其他数据或提供建议。例如用于验证输入地址的AJAX调用。此外,ICommand
对于基本抽象类来说是一个糟糕的名称选择。 ICommand
是命令体系结构的通用接口。 (“I”前缀通常是为接口名保留的。)我主要处理MVVM,但我怀疑MVC已经有了一个通用命令接口。
答案 1 :(得分:0)
这可能不是您想听到的,但我会将您的用户界面重新构建为基于任务的UI,并将您的UI构建为常见任务,例如更改执行药品管理编号,这些任务可以随着时间的推移而改进。
如果您有现有的分析,您会注意到某些字段只会一起更改,这些字段可以在逻辑上分组为常见任务 我还认为在构造函数中隐藏数据库调用并将该linq语句移动到Execute方法并使ctor只初始化公共属性或私有字段并让它们在execute方法中使用是一种不好的做法。
将查询移入execute方法的主要原因是减少任何Optimistic并发错误的可能性。
此外,我也觉得调用Base类ICommand不是一个好习惯,可能会导致将来出现混乱,并建议您再次调用它或将其更改为接口。