这篇文章接下来我们要谈谈《 企业应用架构模式- Martin Fowler 》这本书中所提 domain 的三种 patterns 的第三种『 Table Module 』。
书中的定义为 :
A Table Module organizes domain logic with one class per table in the database, and a single instance of a class contains the various procedures that will act on the data. The primary distinction with Domain Model is that, if you have many orders, a Domain Model will have one order object per order while a Table Module will have one object to handle all orders.
然後我自已的中文理解为 :
一个 class 用来表达一个 table,也就是说会在一个 class 中处理多个笔资料,而 domain model 这是一个 class 代表一笔资料。
然後我简单重点整理一下 :
然後和前一篇的 domain model 比较如下 :
下面范例为一个简单的购物车结帐,然後总共有三个步骤 :
我觉得重点就是一个 module 处理一张表内的东西
class CartTableModule{
construct(cartDataSource){
this.cartDataSource = cartDataSource
}
getCartProducts(cartId){
const carts = this.cartDataSource({ query: cartId })
return carts.products
}
}
class OrderTableModule{
construct(orderDataSource){
this.orderDataSource = orderDataSource
}
createOrder(products){
const orderBody = _generateOrderBody(products)
this.orderDataSource.save(orderBody)
}
}
class PaymentTableModule{
construct(paymentDataSource){
this.paymentTableModule = paymentTableModule
}
createPayment(order){
this.paymentTableModule.save(order)
}
}
// 当购物车要结帐时
const cartId = '12345'
cartTableModule = new CartTableModule(CartDataSource)
orderTableModule = new OrderTableModule(OrderDataSource)
paymentTableModule = new PaymentTableModule(PaymentDataSource)
const products = cartTableModule.getCartProducts(cartId)
const order = orderTableModule.createOrder(products)
const payment = paymentTableModule.createPayment(order)
这让我想到,很多初期开发的专案,有很多一部份是先设计资料表,然後在设计 domain,然後一开始大部份都是以资料表为单位,来进行业务逻辑。
初期因为业务简单表与业务一致,因此不会有太大的问题,但慢慢 domain 越来越复杂就会开始不适用了。
这里我想到和 Transaction Script 的比较 :
简单的说,要完成一件事情,Transaction Script 只要一个 class,而 Table Module 可能要 n 个。
我们公司好像现在还不少这种类型的,以资料表为主所建立的 class。
我一定要把你带好,如果我不把你拉上来,那谁把我推上去。 每间公司在新人教育训练上,愿意投资的资源落...
再熟悉不过的字串,也算是资料结构? 我们常常使用的字串,也算是一种有顺序关系的「序列容器」,因此...
在 Day25 要求的功能,还剩下一个还没完成 不过实际上并没有推荐前10部影片的必要性 作为最後一...
本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...
二维阵列的一维读入法 #include <math.h> #include <st...