برنامه نویسی

fflib – چارچوب قدیمی اما طلایی که هر توسعه دهنده Salesforce باید بداند

مقدمه

توسعه Salesforce طی سالها تکامل یافته است ، اما یک چارچوب در آزمون زمان ایستاده است: FFLIB (Apex مشترک). علی رغم مدتی در اطراف ، ابزاری قدرتمند است ، به خصوص برای شرکتهای در مقیاس بزرگ که با منطق پیچیده تجارت سر و کار دارند.
با رشد برنامه های Salesforce ، مدیریت مقیاس پذیری ، آزمایش و مدولار سخت می شود. fflib (Apex مشترک) این کار را با اجرای الگوهای سازمانی APEX ، ساخت ساختار یافته و حفظ کد ساده می کند. این وبلاگ به بررسی FFLIB ، اهمیت آن و چگونگی بهره مندی از صنایع در مقیاس بزرگ که ساختار پیچیده ای دارند ، می پردازد.

fflib چیست؟

FFLIB (کتابخانه Financial Force) یک چارچوب Apex است که برای اجرای جدایی نگرانی ها در برنامه های Salesforce طراحی شده است. برای اطمینان از کد تمیز ، قابل نگهداری و قابل استفاده مجدد ، در اطراف طراحی دامنه محور (DDD) و الگوهای سازمانی ساخته شده است. این امر به ویژه در سناریوهایی که سازمانها با طرح های پیچیده ، محاسبات تجاری و معاملات با حجم بالا با استفاده از ویژگی هایی مانند جریان ، محرک ها ، دسته ها ، صفحات و فراخوان ها سروکار دارند ، سودمند است.

معماری لایه ای دامنه محور در اوج

اجزای کلیدی fflib

  1. Domain Layer – منطق تجارت مربوط به sobjects را محصور می کند.
  2. Layer Service – به عنوان رابط بین لایه دامنه و سیستم های خارجی عمل می کند.
  3. Selector Layer – نمایش داده های SOQL را بهینه کرده و پردازش فله را اعمال می کند.
  4. واحد کار (UOW) – عملیات DML کارآمد را با دسته بندی درج ها ، به روزرسانی ها و حذف ها ، کاهش تأثیر محدودیت های فرماندار و بهبود کنترل معامله تضمین می کند.
  5. خدمات تشخیص – ارزیاب قانون تجارت.

چرا از FFLIB در صنایع در مقیاس بزرگ استفاده می کنید؟

1. تفکیک نگرانی ها برای حفظ

  • شرکت های بزرگ اغلب تیم های مختلفی دارند که روی همان سیستم کار می کنند. FFLIB جدایی واضح بین لایه ها ، کاهش درگیری ها و آسانتر کردن اشکال زدایی را انجام می دهد.
  • به عنوان مثال ، محرک ها نباید شامل منطق تجارت باشند. در عوض ، منطق باید در لایه های دامنه و سرویس قرار گیرد و اصلاح کد را بدون شکستن اتوماسیون موجود آسانتر می کند.

2. فله و بهینه سازی عملکرد

  • برنامه های سازمانی میلیون ها سوابق را اداره می کنند. FFLIB تضمین می کند که نمایش داده ها و عملیات DML مطابق با محدودیت های فرمانداری است.
  • مثال: به جای ایجاد چندین تماس SOQL در یک حلقه ، لایه انتخاب کننده FFLIB نمایش داده ها را بهینه می کند تا فقط زمینه های مورد نیاز را واکشی کند.

3. رسیدگی به یکپارچه پردازش ناهمزمان

  • سیستم های پیچیده شامل دسته ها ، صفحات و روش های آینده برای پردازش با حجم بالا هستند.
  • FFLIB با متمرکز کردن منطق در لایه سرویس ، اطمینان از مکانیسم های آزمایشگاهی قابل اعتماد و رسیدگی به خطا ، امکان دستیابی به این موارد را فراهم می کند.

4. تماس و ادغام سیستم خارجی

  • هنگام انجام تماس های خارجی API ، توسعه دهندگان اغلب با مدیریت پاسخ ها و خطاها مبارزه می کنند.
  • FFLIB کار ساختاری را از طریق لایه های سرویس فراهم می کند ، و باعث می شود که تماس تلفنی ها در کلاس های آزمایشی را آسان تر کنید و از پردازش مناسب پاسخ API اطمینان حاصل کنید.

5. واحد کار برای مدیریت کارآمد DML

  • الگوی واحد کار (UOW) در FFLIB به دسته بندی چندین عملیات DML در یک تعهد واحد ، بهبود کارآیی و کاهش خطرات محدود کننده فرماندار کمک می کند.
  • به جای انجام عملیات DML جداگانه ، FFLIB_UNITOFWORK FFLIB تمام درج ها ، به روزرسانی ها را جمع می کند و آنها را به صورت کنترل شده حذف و اجرا می کند.

مثال: استفاده از واحد کار برای پردازش ترتیب

public class OrderService {
    public void createOrderWithItems(Order__c order, List items) {
        fflib_UnitOfWork uow = new fflib_UnitOfWork(new Schema.SObjectType[]{Order__c.SObjectType, Order_Item__c.SObjectType});
        uow.registerNew(order);
        for (Order_Item__c item : items) {
            uow.registerNew(item);
        }
        uow.commitWork();
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • این تضمین می کند که همه سوابق در کنار هم متعهد شده اند ، از درج های جزئی یا برگشتی های غیر ضروری جلوگیری می کنند.

6. افزایش تست و تزریق وابستگی

  • در برنامه های در مقیاس بزرگ ، آزمایش بسیار مهم است. FFLIB از تزریق وابستگی استفاده می کند و به توسعه دهندگان این امکان را می دهد تا وابستگی ها را مسخره کنند و آزمایشات واحد را بدون هدف قرار دادن به پایگاه داده اجرا کنند.

مورد استفاده پیچیده: پردازش سفارش چند مرحله ای با FFLIB

سناریو: یک شرکت بزرگ تجارت الکترونیکی باید سفارشات مشتری را که شامل می شود پردازش کند:

  • اعتبار سنجی سفارش (محرک و لایه دامنه)
  • بررسی و رزرو موجودی (لایه سرویس و صفحات)
  • پردازش پرداخت از طریق API خارجی (Callout & Future Method)
  • پردازش دسته ای برای تحقق سفارش (دسته Apex)

اجرای

1. سفارش را به صورت منطق دامنه فراخوانی سفارش دهید

trigger OrderTrigger on Order__c (before insert, before update) {
    fflib_SObjectDomain.triggerHandler(OrderDomain.class);
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2. لایه دامنه – منطق تجارت

public class OrderDomain extends fflib_SObjectDomain {
    public OrderDomain(List records) {
        super(records);
    }
    public override void onValidate() {
        for (Order__c order : Records) {
            if (order.Total_Amount__c <= 0) {
                throw new fflib_SObjectDomainException('Order total must be greater than zero');
            }
        }
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

3. لایه خدمات – بررسی موجودی و پردازش پرداخت

public class OrderService {
    public void processOrder(Id orderId) {
        Order__c order = new OrderSelector().selectById(orderId);

        // Check Inventory (Queueable)
        System.enqueueJob(new InventoryCheckQueueable(order));

        // Process Payment (Callout)
        PaymentProcessor.processPayment(order);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

4. Queeable – بررسی موجودی

public class InventoryCheckQueueable implements Queueable {
    private Id orderId;
    public InventoryCheckQueueable(Order__c order) {
        this.orderId = order.Id;
    }
    public void execute(QueueableContext context) {
        // Check and reserve inventory
        System.debug('Checking inventory for Order: ' + orderId);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

5. فراخوان – پردازش پرداخت

public class PaymentProcessor {
    @future(callout=true)
    public static void processPayment(Order__c order) {
        HttpRequest req = new HttpRequest();
        req.setEndpoint('https://payment-gateway.com/api/pay');
        req.setMethod('POST');
        req.setBody('{"orderId":"' + order.Id + '", "amount": ' + order.Total_Amount__c + '}');
        new Http().send(req);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

6. دسته – پردازش تحقق سفارش

public class OrderFulfillmentBatch implements Database.Batchable {
    public Database.QueryLocator start(Database.BatchableContext context) {
        return Database.getQueryLocator('SELECT Id, Status__c FROM Order__c WHERE Status__c="Pending");
    }
    public void execute(Database.BatchableContext context, List scope) {
        for (Order__c order : (List)scope) {
            order.Status__c="Shipped";
        }
        update scope;
    }
    public void finish(Database.BatchableContext context) {
        System.debug('Order fulfillment completed.');
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

جریان اجرا

  1. Trigger برای اعتبار دادن به جزئیات سفارش ، از لایه دامنه استفاده می کند.
  2. Layer Service سفارش را پردازش می کند ، چک های موجودی را انجام می دهد و پردازش پرداخت را آغاز می کند.
  3. بررسی موجودی Queueable تضمین می کند که سهام قبل از پردازش پرداخت در دسترس است.
  4. فرآیند فراخوان آینده پرداخت ، اطمینان از محدودیت های Salesforce را رعایت می کند.
  5. Batch Apex با به روزرسانی وضعیت پس از پردازش ، سفارش را برآورده می کند.

منابع یادگیری اضافی

پایان

FFLIB روشی ساختاری و مقیاس پذیر برای اجرای الگوهای شرکت Apex در Salesforce فراهم می کند. با اتخاذ این چارچوب ، توسعه دهندگان می توانند برنامه هایی را ایجاد کنند که دارای مدولار ، قابل نگهداری و قابل آزمایش باشند و از موفقیت طولانی مدت اطمینان حاصل کنند.

چرا شرکتهای بزرگ باید از fflib استفاده کنند

  • منطق کسب و کار پیچیده (جریان ، دسته ، صفحات ، فراخوان)
  • بهینه سازی عملکرد را تضمین می کند (انتخاب کنندگان SOQL ، فله DML ، UOW)
  • معماری مقیاس پذیر (طراحی دامنه محور) را اجرا می کند
  • قابلیت آزمایش و آمادگی CI/CD را بهبود می بخشد (مسخره و تزریق وابستگی)

این که آیا شما در حال کار بر روی یک پروژه کوچک هستید یا یک برنامه بزرگ در مقیاس بزرگ ، FFLIB می تواند به ساده سازی توسعه APEX شما کمک کند.

برنامه نویسی مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا