我正在使用ASP.NET MVC,LINQ2QL和Repository设计模式重写项目管理工具。几乎遵循NerdDinner的例子。
我有一个名为Task的类,它有一个TaskStages的子列表。为了这个例子,阶段是准备好,正在开发和完成。我跟踪任务中的当前阶段,但每次阶段更改时我都想将历史记录写入任务阶段表。
我在努力放置这个功能并保持可测试性。它是否进入控制器?库?或部分类?
如果这是设计问题,请告诉我们!
答案 0 :(得分:2)
您可以采用以下两种方式之一。
就个人而言,我会创建位于Controller和数据访问(Repository / LINQ2SQL)之间的业务对象。然后,您将使用这些对象作为模型,并通过它们与数据进行交互。
您也可以将逻辑放在控制器中......但如果应用程序的多个区域需要以相同的方式执行,则必须全面重复该逻辑。
答案 1 :(得分:2)
...每次舞台改变我想要 将历史记录写入任务 舞台表。
您需要有一个负责更改Stage的服务:
public interface IStageChanger {
void Rename(Task t, string newName);
// etc
}
我在努力把它放在哪里 功能和维护 可测试性。它会进入吗? 控制器?库?或部分 类?
都不是。服务水平。您可以让另一个服务负责编写历史记录,因此IStageChanger的结果实现与此类似:
public class StageChanger : IStageChanger {
public StageChanger(ITaskHistoryWriter historyWriter) {
//
}
public void Rename(Task t,string newName) {
history.Write(t, /*whatever*/)
}
}
然后你使用DependencyInjection容器(Windsor或类似的)只是请求你的转换器服务。
答案 2 :(得分:0)
我是ASP.NET MVC的新手,但我会在类上有一个方法来更改阶段,并在该方法中设置跟踪这些更改的逻辑(根据需要进行重构)。简而言之,我不认为这在控制器中明确属于。