【问题标题】:What is the difference between business class and domain class? What is meant by persistent classes?业务类和领域类有什么区别?持久类是什么意思?
【发布时间】:2015-02-16 11:40:23
【问题描述】:

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

【问题讨论】:

    标签: java oop persistence


    【解决方案1】:

    域类是来自 Domain Model 的类,Martin Fowler 在 Patterns of Enterprise Application Architecture 中描述如下:

    结合了行为和数据的领域对象模型。

    在最糟糕的情况下,业务逻辑可能非常复杂。规则和逻辑描述了许多不同的情况和行为倾向,对象被设计用来处理这种复杂性。领域模型创建了一个由相互关联的对象组成的网络,其中每个对象都代表一些有意义的个人,无论是大到公司还是小到订单上的一行。

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

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

    【讨论】:

      【解决方案2】:

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

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

      在我看来,您好像对对象/关系映射感到好奇。我建议阅读this wikipedia article 开始。

      【讨论】:

        【解决方案3】:

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

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

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

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

        而且我确实知道钱通常不是整数,并且借记的金额通常记入其他人的贷方:)

        【讨论】:

          【解决方案4】:

          BusinessDomain 这两个术语经常作为同义词使用。就个人而言,我更喜欢术语 Domain ModelDomain Object 等,因为它们不受限于处理 business(不管是什么) .

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

          【讨论】:

            【解决方案5】:

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

            领域类是为特定领域设计和使用的类,可供多个做类似事情的项目使用。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-04-06
              • 2014-02-11
              • 2016-07-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-11-21
              • 1970-01-01
              相关资源
              最近更新 更多