2

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

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

4

2 回答 2

1

明显太细了。相反,您应该为诸如插入新实体、(一个或多个相关对象的图形)更新实体等操作定义命令。

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

于 2012-12-04T22:35:11.437 回答
0

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

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

将查询移动到执行方法的主要原因是减少任何乐观并发错误的机会。

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

于 2012-12-09T19:27:33.053 回答