Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#MVC中实现命令模式的几个问题_C#_Model View Controller_Command - Fatal编程技术网

C#MVC中实现命令模式的几个问题

C#MVC中实现命令模式的几个问题,c#,model-view-controller,command,C#,Model View Controller,Command,我希望这是直截了当的。我正在尝试在我正在制作的MVC应用程序中实现命令模式。我看到的唯一问题是命令对象的数量非常多 我有11个表,每个表大约有20个字段需要更新 我的问题是每个字段是否需要一个不同的对象 这是一个医疗保健应用程序,让我举一个例子。 我有一张名为KeyHospital的表,这个表存储医院信息,并且只存储我们医院客户的医院信息。我已经使用Linq to SQL连接到数据库。KeyHospital手术台可能是迄今为止最大的手术台。我所做的是为每个字段创建一个新对象 public cla

我希望这是直截了当的。我正在尝试在我正在制作的MVC应用程序中实现命令模式。我看到的唯一问题是命令对象的数量非常多

我有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();
    }
}

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

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


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

这可能不是您想要听到的,但我会将您的用户界面重组为基于任务的UI,并将您的UI构建为通用任务,例如更改缉毒管理局编号,这些任务可以随着时间的推移而细化时间

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

将查询移动到execute方法中的主要原因是为了减少出现任何乐观并发错误的机会


此外,我还觉得调用基类ICommand不是一个好的做法,可能会导致将来的混乱,建议您再次调用CommandBase或将其更改为接口。

我相信MVCContrib内置了一些命令接口,我永远不需要插入任何东西,我只需要用新信息更新字段。我把它分解为能够更改每个字段,因为很多时候用户只需要更改一个字段。我相信我的应用程序中的每一个领域都可能自行改变。我确实让ICommand命名了其他名称,但随后注意到intellisense没有拾取任何ICommand,我将再次将其更改为其他名称以修复此问题。此外,它最初是一个接口,但我将其更改为一个抽象类。谢谢你的帮助+1.我在WinForms应用程序中使用MVC模式,并使用数据绑定更新模型。模型类用作对象数据源。非常方便。不需要任何命令来更新单个字段。