美文网首页
Apex 企业设计模式

Apex 企业设计模式

作者: 程程哥 | 来源:发表于2019-12-21 01:53 被阅读0次

    FFLIB 是一个免费的框架,对 Apex 进行了扩展。它的结构实现了 Salesforce 推荐的Apex 企业设计模式

    在学习如何使用 FFLIB 框架之前,我们先来了解一下 Apex 企业设计模式的结构。

    Apex 企业设计模式

    Apex 企业设计模式的结构遵循了“关注点分离”的概念。

    维基百科上对于“关注点分离”的定义是:

    关注点分离(Separation of concerns,SOC)是对只与“特定概念、目标”(关注点)相关联的软件组成部分进行“标识、封装和操纵”的能力,即标识、封装和操纵关注点的能力。是处理复杂性的一个原则。由于关注点混杂在一起会导致复杂性大大增加,所以能够把不同的关注点分离开来,分别处理就是处理复杂性的一个原则,一种方法。

    关注点分离是面向对象的程序设计的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用(将针对特定领域问题代码抽象化成较少的程式码,例如将代码封装成function或是class),业务逻辑同特定领域问题的关系通过侧面来封装、维护,这样原本分散在整个应用程序中的变动就可以很好的管理起来。

    企业设计模式的实现分为以下四个部分:

    • 服务层(Service Layer)
    • 模型层(Domain Layer)
    • 选择逻辑层(Selector Layer)
    • 工作单元(Unit of Work)

    以上四个部分的详细定义可以参考 Martin Fowler 的网站

    服务层

    服务层的作用是提供一组函数,将可重用的逻辑封装起来,供外部调用。

    这里的“外部”包括了外部的应用程序和 Salesforce 本身的一些功能,比如 Visualforce 页面的控制器、Salesforce 的 API 服务等。

    代码示例

    用 Apex 建立一个服务类:

    public with sharing class AccountService {
        public static Account createAccount(String name) {
            // 建立 Account 对象的逻辑
            Account a = new Account(Name = name);
            
            SavePoint sp = Database.setSavePoint();
            try {
                insert a;
            } catch (Exception e) {
                Database.rollback(sp);
    
                throw e;
            }
        }
    }
    

    然后在其他代码中(比如 Visualforce 页面的控制器)就可以使用了:

    Account a = AccountService.createAccount('HelloWorld Company');
    

    模型层

    每个模型层的类都是针对某个对象而创建。模型层的类中封装了针对相关对象的一系列逻辑,比如对象被增删修改之后需要自动执行的操作等。

    和服务层不同的是,模型层中的逻辑是不会被外部调用的(但是可以被服务层调用)。

    在 Apex 中,触发器类是典型的模型层的类。

    选择逻辑层

    选择逻辑层的作用是封装了查询相关对象的逻辑,从而将数据库操作与其他的层分离。

    代码示例

    用 Apex 建立一个选择逻辑类:

    public with sharing class AccountSelector {
        public static Account selectById(Id id) {
            // 通过 Id 查询 Account 对象的逻辑
            // ...
        }
    }
    

    然后在其他代码中(比如服务层或外部代码)就可以使用了:

    Account a = AccountSelector.selectById('XXXXXXXXXXXXXXXXXX');
    

    工作单元

    工作单元是一种设计模式,它负责保存在各个逻辑中被增删修改的数据,并负责将这些数据的变化写入数据库。

    对于 Apex 的开发,使用工作单元可以实现以下几个方面:

    • 记录一系列被增删修改的数据
    • 记录数据之间的关系
    • 在将数据的变化保存到数据库时,一次性写入,提高系统性能
    • 在将数据的变化保存到数据库时,自动定义 SavePoint,在出现错误时自动回滚。这样就减轻了开发者的工作

    比如在 .NET 的 Entity Framework中,ObjectContext 和 DbContext 的设计就体现了工作单元的模式。

    相关文章

      网友评论

          本文标题:Apex 企业设计模式

          本文链接:https://www.haomeiwen.com/subject/sxlbcftx.html