我来自WebForms世界,其中所有逻辑都位于aspx页面的代码隐藏中。在阅读了几本关于ASP.NET MVC的书籍,听了一些播客并在Tekpub上观看了一些视频后,我认为现在是时候采取一些不同的方式。
不幸的是,我已经卡住了。
我正在尝试构建某种小型和基本的CMS,我可以在其中添加多个网站。
我知道我应该保持我的控制器很薄,所以我想我应该使用某种服务类(让我们称之为WebsiteService)来做到这一点。我正在使用Entity Framework进行数据访问,而我的Views都使用特定的ViewModel。当我创建或编辑网站时,这四件事情应该发生:
基本上,我认为WebsiteService应该执行更高级的验证,写入数据库,创建/编辑目录,添加/删除主机头并向控制器返回一些内容以指示它是否成功。
这门课应该是什么样的?我有几个问题,我不知道答案。
WebsiteService.SaveWebsite(ViewModels.CreateWebsite website)
)中完成,还是应该提供控制器必须调用的单独方法? (我想不是因为我认为通话顺序很重要。)答案 0 :(得分:1)
对此的回答是部分主观的,意见问题,但这是我的想法:
可以。但更好的方法是使用AutoMapper为您执行此操作。用于数据驱动的MVC应用程序的“必备”开源工具之一。
是 - 输入验证应通过View Models上的验证属性完成。更广泛的/域/业务验证可以在服务中完成,也可以在域模型本身上完成。我更喜欢(并使用)第二种选择。我的域模型也是我的POCO(由EF使用),但我有特定于域(但不是数据库)的额外方法/属性。
不,我认为这应该是单独的方法,主要是为了测试/分离关注点。你有三件事 - 数据库持久性,文件编写和IIS工作。那对我来说应该是三种不同的服务。我希望你的“WebsiteService”将这些任务委托给其他服务。