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

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

域类是来自域模型的类,Martin Fowler在企业应用程序体系结构模式中描述如下:

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

替代文字

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

对我而言, 业务类没有区别:业务对象不会执行或多于或少于域对象的业务逻辑(在域对象外部实现业务逻辑的域模型称为Anemic Domain Model ,是一个贬义词),域对象和业务对象 一回事。

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

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

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

听起来像你对对象/关系映射感到好奇。 我建议您阅读此维基百科文章以开始使用。

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

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

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

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

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

我们以银行交易为例。 你有一个持久的域类Account 。 我的Account (一个实例)将具有值为1000的字段Balance

处理借记的交易业务逻辑类似于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,并且借记的金额通常记入别人的钱:)

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

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

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