您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“怎么理解ObjectiveSql的面向?qū)ο蟆钡挠嘘P(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
最近看了一些視頻,是關(guān)于“充血模型”和“貧血模型”,還有ActiveRecord 模式等,如果站在更高的角度去理解,“貧血模型”就是C語言中的"struct",而充血模型就是Java 中的Class,到底是"struct" 還是Class 要站在系統(tǒng)不同位置去理解,兩者都有存在的理由,只是“貧血模型”會(huì)隱式的存在。我的理解是“貧血模型”通常存在于數(shù)據(jù)傳輸,它只是一種傳輸協(xié)議定義,可以用在不同子系統(tǒng)或數(shù)據(jù)庫(kù)之間的數(shù)據(jù)傳遞,當(dāng)然“貧血模型”也不僅僅只有set 和get 方法,它應(yīng)封裝協(xié)議相關(guān)的行為(通常這些行為被封裝在其它控制Class 中),Google 的ProtoBuffer 就是一個(gè)很好的實(shí)踐。而“充血模型”和ActiveRecord,則是人為的一種定義,本質(zhì)上它只是面向?qū)ο笤O(shè)計(jì)中基礎(chǔ)的概念(狀態(tài)和行為的封裝),純屬制造概念。
面向?qū)ο蟮脑掝}很大,我就以我項(xiàng)目中實(shí)際的問題簡(jiǎn)單介紹。
@DomainModel public class Order { private String no; private Integer memberId; private Float amount; private Float quantity; @Column(transition = SqlDateTimeTransitional.class) private Timestamp salesAt; @Relation(relationType = RelationType.BELONGS_TO) private Member member; @Relation(relationType = RelationType.HAS_MANY) private List<OrderLine> orderLines; @Transactional @DataSourceName("test") public static void makeOrder(Order order, OrderLine... orderLines) throws SQLException { Order.create(order, false); OrderLine.create(orderLines, false); } }
DomainModel 在項(xiàng)目中以Annotation 的形式存在,用于標(biāo)識(shí)一個(gè)Class 是否為應(yīng)用系統(tǒng)中的一個(gè)模型,模型中應(yīng)該包括業(yè)務(wù)的狀態(tài)和邏輯,同時(shí)也應(yīng)描述描述該模型與其它模型的關(guān)系,具體解釋如下:
@DomainModel 會(huì)將該模型的狀態(tài)與數(shù)據(jù)庫(kù)中的表進(jìn)行關(guān)聯(lián)
@Column(transition = SqlDateTimeTransitional.class) 定義該字段與數(shù)據(jù)庫(kù)之間的轉(zhuǎn)換方式
@Relation(relationType = RelationType.BELONGS_TO) 定義Order 與Member 的關(guān)系
@Transactional 標(biāo)識(shí)該方法的數(shù)據(jù)操作會(huì)作為事務(wù)的形式提交
@DataSourceName("test") 用于多數(shù)據(jù)源時(shí)指定該方法中的數(shù)據(jù)所屬的數(shù)據(jù)庫(kù)
Order 模型你可以稱為ActiveRecord,也可以稱為充血模型,但本質(zhì)上它就是一個(gè)Java 的標(biāo)準(zhǔn)Class,符合面向?qū)ο笤O(shè)計(jì)的一般原則,將問題域細(xì)分,再封裝,它只是將問題域中“訂單”進(jìn)行抽象,設(shè)計(jì)狀態(tài)和行為,將問題域縮小至原子粒度,從業(yè)務(wù)邏輯概念進(jìn)行推演不會(huì)產(chǎn)生歧義,使代碼能夠清晰描述邏輯和狀態(tài),將純技術(shù)型代碼分離,上述定義完成后,你可以這樣直接使用:
Member member = Member.queryByPrimaryKey(1);
List<Member> members = Member.query("id between ? and ?", 10, 20);
int count = Member.count("id > ?", 10);
“怎么理解ObjectiveSql的面向?qū)ο蟆钡膬?nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。