我正在研究“交易脚本”,“表模块”和“域模型”,但它似乎在某种程度上与我相关。
请您举个例子来比较这三种方法吗?
谢谢
答案 0 :(得分:3)
我希望你指的是福勒的书 - http://martinfowler.com/eaaCatalog/
与Domain的主要区别 模型(116)是,如果你有很多 订单,域模型(116)将有 每个订单一个订单对象,而a 表模块将有一个对象 处理所有订单。
答案 1 :(得分:0)
我有同样的问题,并且想到了以下示例:
想象一下一个具有以下用例的在线商店应用程序:
用户购买产品
用户编辑其个人资料
使用交易脚本,我们每个用例都有一个类,每个事务/请求都有一个功能!
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(...) {...}
}
当没有太多要实现的逻辑并且我们需要的只是一组分组数据库事务时,这才有意义! (并且您不需要经常重用代码)
使用域模型,我们可以将现实映射到域对象上。 我们将为用户,产品,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
...
}
这对于在数据库上具有大量工作/逻辑的小型应用程序很有意义。 但这并不能很好地扩展复杂性。
总体: 对于小型应用程序,请使用tansaction脚本。对于非常复杂的应用程序,领域模型是最好的。 (据我所知)表模块并不常见,使用ORM可能更好。