当前位置: 首页 > 知识库问答 >
问题:

域对象中的业务逻辑

程阳平
2023-03-14

因此,每个功能区显然都在数据库中,但它们还需要一些逻辑来确定用户何时获得了功能区。

按照我的编码方式,Ribbon是一个简单的接口:

public interface Ribbon {
    public void setId(int id);
    public int getId();
    public String getTitle();
    public void setTitle(String title);
    public boolean isEarned(User user);
}

RibbonJPA是一个抽象类,它实现了Ribbon接口,避免了isWarned()方法的定义:

@Entity
@Table(name = "ribbon")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "ribbon_type")
public abstract class RibbonJpa implements Ribbon {
    @Id
    @Column(name = "id", nullable = false)
    int id;

    @Column(name = "title", nullable = false)
    private String title;

    @Override
    public int getId() {
        return id;
    }

    @Override
    public void setId(int id) {
        this.id= id;
    }

    @Override
    public String getTitle() {
        return title;
    }

    @Override
    public void setTitle(String title) {
        this.title = title;
    }
}

现在,将像这样实现一个特定的功能区:

@Entity
public class FirstUsersRibbon extends RibbonJpa implements Ribbon {
    public FirstUsersRibbon() {
        super.setId(1);
        super.setTitle("First 2,000 users registered to the website");
    }

    @Override
    public boolean isEarned(User user) {
        // My logic to check whether the specified user has won the award
    }
}

这段代码工作得很好,表是按照我期望的方式在数据库中创建的(我在本地环境中使用DDL生成)。

问题是,在域对象中编写业务逻辑感觉是错误的。这是好的练习吗?你能提出一个更好的解决方案吗?此外,我不能自动连接实体中的任何DAO(FirstUsersRibbon),我需要在业务逻辑中使用它们(在本例中,我需要一个DAO来检查用户是否在注册到网站的前2,000个用户中)。

非常感谢任何帮助。

谢谢你!

共有1个答案

魏浩广
2023-03-14

问题是,在域对象中编写业务逻辑感觉是错误的。

许多人会说相反的情况是正确的:在其他地方使用业务逻辑是一种反模式(一种贫乏的领域模型)。有关更多信息,请参见域驱动设计。

您可能会想知道传统的3层体系结构的中间层是用来做什么的。它为应用程序提供了一个服务层。请参阅我的相关问题“EJB有什么用?”。

 类似资料:
  • 问题内容: 软件体系结构中的域对象和域服务是什么?我不熟悉它们,或者它们与业务逻辑层有何不同? 问题答案: 不同的人以不同的方式使用这些术语,但这是我的看法: 1)“业务”和“域”大致是同义词。“域”更为通用,因为它不会假设您正在编写业务应用程序。因此,如果我们正在编写科学应用程序或游戏,则可能更喜欢将代码的相关部分称为“域”代码,而不是“业务”代码。因此,在本说明的其余部分中,我将使用“域”,因

  • 综述 在多功能的动态web应用程序中测试业务逻辑漏洞需要用非常规手段来思考。如果应用认证机制原先以1、2、3的步骤依次执行的验证身份目的来开发,万一用户从步骤1直接跳到步骤3会发生什么?用更加简单的例子来说,在打开失败、权限拒绝或仅仅500的错误的情况下,应用程序是否依然能够提供访问权限? 可以举出许多例子,但是不变的思想是“跳出常规思维”。这种类型的漏洞无法被漏洞扫描工具探测到,依赖于渗透测试人

  • 在我的Spring Boot项目中,我使用Hibernate,基本上我们有三种对象 在控制器层中使用的DTO对象 业务对象—业务对象是我们在整个应用程序中使用的对象 实体/域对象-用于JPA层 当我们准备好保存数据时,我们将业务对象转换为域/实体对象 当我们准备将其发送给客户机/控制器时,我们可以将实体对象转换为业务对象,然后将此业务对象转换为DTO对象。 理想情况下,我被告知将BOs更改为- 我

  • 1.1  概述 业务逻辑模块主要用于编写业务逻辑,一般包含三个子模块:action(定义action和procedure)、code(业务逻辑的实现,一般使用java实现,有src,dsrc,lib)、fn(函数定义)。 1.2  Action定义 语法: <action name=" n" global="true" log-enabled="true" procedure=" "> <参

  • 我试图理解JVM的内存管理方案 考虑A、B两类 从主B B=新B(); 据我所知,类加载器将加载A、B,并分别创建2个对象。是否有任何其他对象将被创建? 另外,我问题的第二部分是,在访问Java Visual VM时,我看到Java NIO包的对象已经创建。有什么方法可以阻止JVM创建与我的项目无关的对象吗?

  • 我试图理解微服务。我想知道如何解决微服务架构中的一对多/多对多关系问题,以及最佳实践是什么。假设我想将学生课程应用程序转换为学生服务,将课程服务和学生服务对话转换为同一数据库中的学生表和课程服务对话课程表。 示例:学生可以注册许多课程,而且许多课程可以有许多学生(多对多关系)。我有2个微服务1:学生服务2:课程服务 学生服务有学生对象 课程服务具有课程对象 我知道学生服务部必须致电课程服务部才能获