【发布时间】:2015-02-16 11:40:23
【问题描述】:
业务类和领域类有什么区别?持久类是什么意思?
【问题讨论】:
标签: java oop persistence
业务类和领域类有什么区别?持久类是什么意思?
【问题讨论】:
标签: java oop persistence
域类是来自 Domain Model 的类,Martin Fowler 在 Patterns of Enterprise Application Architecture 中描述如下:
结合了行为和数据的领域对象模型。
在最糟糕的情况下,业务逻辑可能非常复杂。规则和逻辑描述了许多不同的情况和行为倾向,对象被设计用来处理这种复杂性。领域模型创建了一个由相互关联的对象组成的网络,其中每个对象都代表一些有意义的个人,无论是大到公司还是小到订单上的一行。
对我来说,业务类没有区别:业务对象执行的业务逻辑不会比领域对象(业务逻辑在外部实现的领域模型)多或少。域对象被称为Anemic Domain Model,这是一个贬义词),域对象和business objects是一回事。
最后,持久类是一个可以...持久化的类,这意味着将内存中的信息表示传输到物理存储,该存储将在 JVM 的生命周期之外持续存在。通常,持久性是使用数据库实现的(但这不是唯一的解决方案,例如参见object prevalence)。典型的持久性操作包括创建、读取、更新和删除,这些操作称为 CRUD 操作。域对象经常是持久化的,即您可以通过隐藏所选持久性引擎的底层细节的 API 对它们执行 CRUD 操作。
【讨论】:
“域”类是为您的数据建模的类。它通常用于将数据从数据存储(例如数据库)映射到内存对象。业务类是您的应用程序使用的类。它可以与领域类相同,通常执行某种业务逻辑或处理。
持久性是指将对象状态保存到某个数据存储(例如 xml、文本文件或更常见的数据库)的能力。因此,无论应用程序是否正在运行,这种对象的状态都会“保持”。
在我看来,您好像对对象/关系映射感到好奇。我建议阅读this wikipedia article 开始。
【讨论】:
业务类提供特定领域的逻辑。
域类是表示域的一部分的实体。
一个持久化类,或者更好的持久化实例,在服务器重启后具有相同的数据(数据通常存储在某种数据库中)。
我们以银行交易为例。您将拥有一个持久域类Account。我的Account(一个实例)会有一个字段Balance,值为1000。
处理借方的事务业务逻辑类似于AccountDebit,具有debitAccount(Account account, int amount) 方法和业务逻辑
int balance = account.getBalance();
if (balance < amount) {
throw exception("You're too poor");
}
balance = balance - amount;
account.setBalance(balance);
account.commit(); // save the values to persistent store
而且我确实知道钱通常不是整数,并且借记的金额通常记入其他人的贷方:)
【讨论】:
Business 和 Domain 这两个术语经常作为同义词使用。就个人而言,我更喜欢术语 Domain Model、Domain Object 等,因为它们不受限于处理 business(不管是什么) .
例如,在Safewhere 中,我们主要使用基于声明的身份和授权。我们建模的概念与传统的“业务”几乎没有共同之处,因此在这种情况下,我认为领域模型是一个更合适的术语。
【讨论】:
业务类是为特定项目设计和使用的类,很难被其他项目重用。
领域类是为特定领域设计和使用的类,可供多个做类似事情的项目使用。
例如,JDBC 类是用于数据库访问的域类。 Swing 类是用于 GUI 构建和操作的域类。 Form1 包含一组用于显示“Hello World”消息的组件,属于业务类。
【讨论】: