我来自一个 WebForms 世界,其中所有逻辑都位于 aspx 页面的代码隐藏中。在阅读了几本关于 ASP.NET MVC 的书籍、听了一些播客并在 Tekpub 上观看了一些视频之后,我决定是时候以不同的方式处理事情了。
不幸的是,我已经被卡住了。
我正在尝试构建某种小型和基本的 CMS,我可以在其中添加多个网站。
我知道我应该让我的控制器保持精简,所以我想我应该使用某种服务类(我们称之为 WebsiteService)来做到这一点。我正在使用实体框架进行数据访问,并且我的视图都使用特定的视图模型。当我创建或编辑网站时,应该发生以下四件事:
- 验证输入
- 将有关网站的信息添加到数据库(如果是编辑,则更新信息)
- 在磁盘上创建一个目录(如果是编辑,可能重命名该目录)
- 将主机标头添加到 IIS 网站(如果是编辑,则可以删除旧的主机标头和新的主机标头)
基本上,我猜 WebsiteService 应该执行更高级的验证、写入数据库、创建/编辑目录、添加/删除主机头并向控制器返回一些内容以指示它是否成功。
这门课应该是什么样子的?我有几个问题我不知道答案。
- WebsiteService 是否也应该将 CreateWebsite ViewModel 转换为实际的 Website 类,还是应该做其他事情以便 WebsiteService 接受实际的 Website 对象?
- 基本输入验证是通过使用 ViewModel 上的 Validation 属性来完成的。还应该进行更广泛的验证(“数据库中是否已经存在具有此域名的网站?”)。WebsiteService 也应该这样做吗?
- 所有 3 个步骤(保存到数据库、创建目录、将主机头添加到 IIS)都应该在一个公共方法(
WebsiteService.SaveWebsite(ViewModels.CreateWebsite website)
)中完成,还是应该提供控制器必须调用的单独方法?(我猜不是因为我认为调用顺序很重要。)