我将开始一个我自己的项目,它将是 ASP.NET MVC + Fluent NHibernate。我想尽可能多地使用测试优先的方法。那么,我究竟从哪里开始呢?数据库架构?领域模型?将域模型类映射到数据库?
4 回答
如果你几乎没有编写测试的经验,那么从领域模型(或 UI 下方的更高级别)开始是最容易的。当您使用 TDD 驱动域模型的设计时,您就会知道数据库模式需要是什么样的。推迟向系统引入数据库可能是件好事,因为处理数据库模式迁移会给开发增加一些开销。这也将导致更好的设计,因为这样域模型将更好地与数据库层分离。
如果您擅长编写测试和 TDD,那么从端到端测试开始(在这种情况下,它们将针对 Web UI 编写)并产生涉及所有架构部分的一小部分功能可能会有所帮助系统的(如GOOS中所推荐的)。换句话说,创建一个行走的骨架. 这种方法的好处是(1)您将能够从一开始就解决和解决集成问题,(2)当端到端测试用于驱动设计时,它可以帮助您避免实施多余的部分,以及 (3) 编写端到端测试的困难迫使您改进架构并添加监控钩子,这也可能有助于监控生产中的系统。(仍然需要集中单元测试,因为它们提供了类级别的设计压力,而且它们运行得更快,从而提供更快的反馈。)
我在Design for Integrability上写了更多关于后一种方法的文章。
需求收集。
从应用程序的模拟/原型(例如 Balsamiq Mocks)开始,然后编写视图,在进行过程中模拟控制器,然后编写控制器逻辑,沿途模拟 DAO/存储库。当您开始编写 DAO/存储库时,您将对所需的域对象有一个很好的了解。剔除这些并使用 Fluent Nhibernate 构建您的数据库。
至少那是我试图做事的方式。
我向您推荐使用最佳实践的S#arp 架构项目:
- 休眠
- 流畅的休眠
- TDD / DDD 模型优先方法与 Sqlite 数据库进行单元测试
- 嘲笑
- 存储库模式
您还可以安装 S#arp 拱门。Visual Studio IDE 的模板。