关于在C#MVC中实现命令模式的问题

时间:2012-12-04 21:39:26

标签: c# model-view-controller command

我希望这是直截了当的。我正在尝试在我正在制作的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();
    }
}

我这样做是对的吗?我只是觉得我为此写了很多代码,这是我第一次使用命令模式。

2 个答案:

答案 0 :(得分:1)

过于细化。相反,您应该为操作定义命令,例如插入新实体,(一个或多个相关对象的图形)更新实体等。

只要您想执行某个操作,就会使用命令。在某些情况下,更改单个字段可能构成一个操作,例如返回其他数据或提供建议。例如用于验证输入地址的AJAX调用。此外,ICommand对于基本抽象类来说是一个糟糕的名称选择。 ICommand是命令体系结构的通用接口。 (“I”前缀通常是为接口名保留的。)我主要处理MVVM,但我怀疑MVC已经有了一个通用命令接口。

答案 1 :(得分:0)

这可能不是您想听到的,但我会将您的用户界面重新构建为基于任务的UI,并将您的UI构建为常见任务,例如更改执行药品管理编号,这些任务可以随着时间的推移而改进。

如果您有现有的分析,您会注意到某些字段只会一起更改,这些字段可以在逻辑上分组为常见任务 我还认为在构造函数中隐藏数据库调用并将该linq语句移动到Execute方法并使ctor只初始化公共属性或私有字段并让它们在execute方法中使用是一种不好的做法。

将查询移入execute方法的主要原因是减少任何Optimistic并发错误的可能性。

此外,我也觉得调用Base类ICommand不是一个好习惯,可能会导致将来出现混乱,并建议您再次调用它或将其更改为接口。