【问题标题】:Are EJBs package-, class- or method-level mechanismsEJB 是包级别、类级别还是方法级别的机制
【发布时间】:2012-07-05 04:39:52
【问题描述】:

当我在这里说“EJB”时,我指的是 EJB 3.x!

我是 EJB 的新手,想知道如何最好地将我的所有业务逻辑映射到不同的 bean。在一个极端情况下,您可以 KISS 并且只拥有一个单一的 EJB,它具有处理 100% 应用程序业务逻辑的无数方法。在另一个极端,您可以将业务逻辑划分到函数级别 (List<User> getUsersFromMars()),并拥有由 1 个包、1 个类和 1 个方法组成的无数 EJB:

Extreme #1:
    my-ejb.jar/
        com.me.myorg.MonolithicBean
            List<User> getUsersFromMars();
            List<User> getUsersFromVenus();
            //... a bazillion methods

Extreme #2:
    my-mars-ejb.jar/
        com.me.myorg.MarsBean
            List<User> getUsersFromMars();
    my-venus-ejb.jar/
        com.me.myorg.VenusBean
            List<User> getUsersFromVenus();
    //... a bazillion EJBs with 1-and-only-1 method each

显然,我认为最佳实践规定了这两个极端之间的某种中间策略。所以我问,Java/Oracle 对将应用程序的业务逻辑分解为 bean 有何看法,以及如何将它们模块化到正确的级别(EJB、包、类或方法)以实现可重用、可扩展和安全?

【问题讨论】:

    标签: jakarta-ee architecture ejb-3.0


    【解决方案1】:

    我认为这个问题并不是真正针对 EJB,而是更多关于 OO 设计,甚至是通用设计。

    一种经常出现的模式是,您可以将业务逻辑拆分为 DAO 和服务。 DAO 处理与单个(域)实体相关的所有操作,例如客户。它仅与数据源(通常是数据库)交互,并具有保存、更新、删除等方法,还有 getBySomething 方法。此类 DAO 通常可以有 1 到 15 种方法,具体取决于您的具体业务案例。

    然后,根据经验,您的服务与多个实体交互和/或与其他系统(如 JMS 队列、邮件系统、Web 服务等)交互并执行验证/提供安全性。这些构成了您的业务逻辑的动词,通常集中在一个特定的业务概念上,例如一项采购。因此,您可以有一个假设的 PurchaseService,其方法包括 purchaseGood、purchaseOffer、calculateReduction。同样,这将有 1 到 15 或 20 个方法。

    【讨论】:

    • 感谢@Arjan (+1)!那么,这个PurchaseService 会在它自己的 EJB 中,还是我会将多个服务分组到同一个 EJB 中?
    • PurchaseService 将是一个 EJB,但它可以(几乎应该!)注入几个 bean,部分逻辑被委托给它,例如 CustomerDAO 以获取有关进行购买的客户的更多详细信息,PurchaseDAO 来保存实际的购买,也许是一个 OrderQueue 来发送 JMS 消息以开始交付购买的商品的处理,以及一个 NotificationService 来向客户发送确认其购买的通知。因此,单个 Service 被注入多达 10 个甚至更多的其他 bean 的情况并不少见。
    猜你喜欢
    • 2010-09-23
    • 2020-11-26
    • 2016-02-07
    • 2012-04-23
    • 1970-01-01
    • 2018-10-20
    • 2012-06-29
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多