最好有单独的“创建”和“编辑”动作,还是将“创建”和“编辑”合并为一个动作?


15

我们正在使用带有控制器/视图表示层和模型的ASP.NET MVC 2,该模型和模型由业务逻辑层,数据访问层[存储过程和与存储过程进行通信的类/方法]组成。

在业务层及更高层中,对于大多数用途而言,编辑似乎能够代表对象的创建和对象的编辑。这与定义“保存”方法的存储库设计模式非常吻合。我们可以简单地在存储过程中检查ID是否为0,然后如果ID为0则创建一个新对象,否则我们可以只更新现有对象,因为类别ID应该匹配一个。

讨论的主要要点是,将包含创建的编辑拆分为DAL层之外的创建和编辑的单独部分是否最有意义。

一个明显的例子可以显示为路线:

创建 - HTTP:// someurl / somearea /编辑/ 0

编辑 - HTTP:// someurl / somearea /编辑/ 254

创建 - HTTP:// someurl / somearea /创建

编辑 - HTTP:// someurl / somearea /编辑/ 254

是否有与此相关的既定标准或最佳实践?

我知道这是一个小细节,但从逻辑上讲,这是一个重要的细节。


4
我个人认为单独的“创建”和“编辑”操作是一种更清洁(并且可能更易于维护)的实现。
亚当李尔

1
DAL中的一种方法,如果可行,则用于API的两种方法。
CaffGeek

从我的角度来看,mvc可以自然地进行单独的创建和编辑,采用这种方法可以充分利用mvc的优点,这应该是每个人的目标。
maz3tt 2011年

Answers:


5

我绝对会说,分开创建/编辑是值得的,即使不是遵循单一责任原则

有人可能会说,在URL中进行正确的操作也会带来更好的SEO。

不将两者分开将使代码更难进行单元测试。

一个新的阅读代码的程序员可能不会发现必须使用“ edit”方法创建对象的代码非常直观,只是从语义上讲没有意义。但是,我可以同情DAL中的Save()方法。

考虑一下,我真的看不到将其全部放入Edit方法中的好处。


4

我通常喜欢创造一个Save在DAL的方法,但实际实现Create/ Edit/ Delete分开。

例如,我的Save方法将检查对象状态,然后根据需要调用Create / Edit / Delete方法。

switch(obj.State)
{
    case ObjectState.New:
        CreateObject(obj);
        break;
    case ObjectState.Modified:
        UpdateObject(obj);
        break;
    case ObjectState.Deleted:
        DeleteObject(obj);
        break;
}

这使我可以仅调用一种通用方法来保存任何对象,但仍将每个实现(创建,编辑,删除)分开。


你怎么能知道它的删除?
NoChance 2011年

通常我的对象都有一个State属性。例如,单击Delete按钮会将对象标记为“已删除”,然后致电SaveChanges()
Rachel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.