业务类和域类有什么区别?持久化类是什么意思?

时间:2009-11-04 14:45:53

标签: java oop persistence

业务类和域类之间有什么区别?持久化类是什么意思?

5 个答案:

答案 0 :(得分:31)

域类是Martin Fowler在Domain Model中描述的Patterns of Enterprise Application Architecture中的一个类:

  

包含行为和数据的域的对象模型。

     

alt text

     

最糟糕的业务逻辑可能非常复杂。规则和逻辑描述了许多不同的案例和行为倾向,而这就是设计对象的复杂性。域模型创建一个互连对象的Web,其中每个对象代表一些有意义的个体,无论是公司大小还是订单表单上的单个行。

对我而言,业务类没有区别:业务对象不会执行比域对象更多或更少的业务逻辑(业务逻辑在域外实现)域对象称为Anemic Domain Model,这是一个贬义词),域对象和business objects 相同的东西。

最后,持久化类是一个可以...持久化的类,这意味着将内存中的信息表示转移到将超出JVM生存期的物理存储。通常,使用数据库实现持久性(但这不是唯一的解决方案,例如参见object prevalence)。典型的持久性操作包括创建,读取,更新和删除,这些操作称为CRUD操作。域对象经常是持久的,即您可以通过隐藏所选持久性引擎的基础细节的API对它们执行CRUD操作。

答案 1 :(得分:18)

“域”类是对数据建模的类。它通常用于将数据从数据存储(例如数据库)映射到内存中对象。业务类是您的应用程序使用的类。它可以与域类相同,通常执行某种业务逻辑或处理。

持久性是指将对象状态保存到某些数据存储(例如xml,文本文件或更常见的数据库)的能力。因此,无论应用程序是否正在运行,此类对象的状态都会“持续”。

听起来好像你对对象/关系映射感到好奇。我建议您阅读this wikipedia article以开始使用。

答案 2 :(得分:4)

术语商业通常用于同义词。就个人而言,我更喜欢术语域模型域对象等,因为它们不限于处理业务(无论是什么)

例如,在Safewhere中,我们主要使用基于声明的身份和授权。我们建模的概念与传统的“业务”几乎没有什么共同之处,因此在这种情况下,我认为域模型是一个更合适的术语。

答案 3 :(得分:4)

业务类提供特定于域的逻辑。

域类是表示域的一部分的实体。

持久化类或更好的持久化实例在服务器重新启动后具有相同的数据(数据通常存储在某种数据库中)。

我们以银行交易为例。你有一个持久的域类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

而且我确实知道钱通常不是一个int,并且借记的金额通常记入其他人:)

答案 4 :(得分:-3)

业务类是为特定项目设计和使用的类,很难重用于其他项目。

域类是为特定域设计和使用的类,可以由多个类似的项目使用。

例如,JDBC类是数据库访问的域类。 Swing类是GUI构造和操作的域类。 Form1包含一组用于显示“Hello World”消息的组件是业务类。