我正在研究“交易脚本”,“表模块”和“域模型”,但对我来说似乎有些复杂。
能不能给我一个比较这三种方法的例子?
谢谢
我希望你指的是福勒的同一本书 - http://martinfowler.com/eaaCatalog/
与域模型(116)的主要区别在于,如果您有许多订单,域模型(116)将为每个订单提供一个订单对象,而表模块将有一个对象来处理所有订单。
我有同样的问题,我想到了以下示例:
想象一下具有以下用例的在线商店应用程序:
使用Transaction Script,每个用例有一个类,每个事务/请求有一个函数!
class BuyProduct {
List getProducts(string filter) { /* some database query */ }
void putInCart(int productId, int amount) { ... }
void checkout(...) {...}
}
class EditProfile {
void changePassword(string newpwHash) { ... }
void updatePaymentInfo(...) {...}
}
当没有太多逻辑要实现并且我们需要的是一组分组数据库事务时,这是有意义的! (并且您不需要经常重用代码)
使用域模型,我们将在域对象上映射现实。我们将拥有User,Product,ShoppingCart,ProductFilter,PaymentInformation等类。这些类具有执行与类相关的任务的函数。
例如:
class User {
string getPaymentInfo() {...}
void updatePaymentInfo() {...}
}
这些函数可以自己执行数据库查询,也可以将它们委托给持久层。
这种方法适用于非常复杂的应用程序,它具有大量逻辑和许多您希望经常重用代码的情况。
使用表模块,我们将数据库表映射到对象。
在这种情况下,例如,可以有产品表的类,用户表和订单表(跟踪已完成的订单及其状态)。不仅可以将表,还可以定制数据库视图,还可以将事务/请求映射到类/对象。
一个简单的例子:
class ProductTable {
List getProducts(string filter)
void updateAmountAvailable(int productId, int newAmount) {...} // call after someone bought a product to update it's availability
...
}
这对于在数据库上具有大量工作/逻辑的小型应用程序是有意义的。但它不能很好地适应复杂性。
总体而言:对于小型应用程序使用事务脚域模型是非常复杂的应用程序的最佳选择。表模块(据我所知)相当罕见,使用ORM可能更好。