أنماط التصميم في Salesforce

المُقدّمة

تُستخدم أنماط التصميم بشكل أساسي لجعل الكود الخاص بنا يعمل بكفاءة وفعالية. كما أنه يساعد على منع الوصول إلى أي حدود للمحافظ.

ما هو نمط التصميم؟

يصف نمط التصميم مشكلة تحدث بشكل متكرر ، جوهر الحل وعواقبه. لا يوفر تفاصيل التنفيذ الفعلية.

أنواع مختلفة من أنماط التصميم في Salesforce

نمط Singleton في Salesforce

إنه أحد أنماط التصميم الإبداعي التي يمكن من خلالها إنشاء مثيل واحد للفئة لكل معاملة. يرجع السبب إلى التنفيذ المتكرر لمثيل فئة في معاملة واحدة ، وهناك فرص كبيرة للحصول على استثناء الحد. يعمل هذا النمط على تقليل التكرار المتكرر للفئة.

فيما يلي بعض السيناريوهات:

1. قارئ تكوين التطبيق

2. فئة المنفعة (مثل الرياضيات)

3. اتصال مع قاعدة البيانات

4. المسجل

على سبيل المثال:

مشكلة في رمز

تشغيل AccountTrigger على الحساب (قبل الإدراج ، قبل التحديث) {for (Account accRec: Trigger.new) {AccountExampleRecordType aert = new AccountExampleRecordType () ؛ accRec.recordTypeId = aert.Id ؛ }} public class AccountExampleRecordType {public String Id {get؛ مجموعة خاصة ؛} public AccountExampleRecordType () {Id = Account.sObjectType.getDescribe (). getRecordTypeInfosByName () .get ('Example'). getRecordTypeId ()؛ }}

 

تكمن المشكلة في الكود أعلاه في أنه إذا تم إدراج أو تحديث سجلات متعددة ، فسنحصل على مشكلة حد الحاكم حيث يتم إنشاء كائن "AccountExampleRecordType" في كل مرة لكل سجل.

حل: نمط سينجلتون

يوجد أدناه فئة المعالج "AccountExampleRecordType" المطبقة مع Singleton Pattern.

فئة عامة AccountExampleRecordType {// تشير إلى مثيل فئة AccountExampleRecordType الثابت = فارغ ؛ // نوع السجل معرّف السلسلة العامة {get؛ مجموعة خاصة ؛} // يقوم المُنشئ الخاص بتهيئة معرف نوع السجل الخاص AccountExampleRecordType () {Id = Account.sObjectType.getDescribe (). getRecordTypeInfosByName () .get ('Example'). getRecordTypeId ()؛ } // طريقة ثابتة تعيد مثيل نوع السجل العام الثابت AccountExampleRecordType getInstance () {// متغير التحميل الكسول إذا (مثيل == فارغ) {مثيل = جديد AccountExampleRecordType () ؛ عودة المثيل }}}

 

النمط الزخرفي في Salesforce

إنه جزء من نمط التصميم الإنشائي. يتم استخدامه لتوفير وظائف إضافية لـ sObject باستخدام برمجة Apex في Salesforce.

على سبيل المثال:

فئة عامة ExpenseClassDecorator {public List convertExpenses {set؛ get؛} // المنشئ العام ExpenseClassDecorator () {قائمة النفقات = [SELECT ID، Name، Amount__c FROM Expense__c]؛ if (prices.size ()> 0) {convertExpenses = new List ()؛ لـ (المصروفات _ ج: المصروفات) {convertExpenses.add (new ExpensesConverted (expense)) ؛ }}}} فئة عامة ExpensesConverted {Double dollarToInr = 79.85؛ ضعف الدولار إلى اليورو = 0.98 ضعف الدولار إلى الفرنك السويسري = 0.97 ؛ اسم سلسلة المصروفات العامة {get؛ set؛} public Double expInDollar {get؛ set؛} expInInr العامة المزدوجة {get؛ set؛} expInEuro العامة المزدوجة {get؛ set؛} expInChf العامة {get؛ set؛} public ExpensesConverted (Expense__c expense) {expenseName = expense.Name؛ expInDollar = expense.Amount__c ؛ expInInr = expInDollar * dollarToInr ؛ expInEuro = expInDollar * dollarToEuro ؛ expInChf = expInDollar * dollarToChf ؛ }}

 

صفحة VisualForce لإظهار جميع النفقات

 

نمط مصنع iTrigger في Salesforce

يساعد نمط التصميم هذا في تطبيع المشغل والتحكم في تدفق التنفيذ. إنه يجعل اختبار الوحدة أبسط بكثير من خلال التخلص من سبب الزناد ويساعد مجموعة من الأشخاص على العمل في مؤسسة ذات محفزات متعددة.

على سبيل المثال:

الواجهة العامة ITriggerPattern {void BeforeInsert (List newRecords)؛ باطل BeforeUpdate (خريطة newRec ، خريطة oldRec) ؛ باطل BeforeDelete (تعيين oldRecords) ؛ باطل AfterInsert (خريطة newRecords) ؛ باطل AfterUpdate (Map newRecords، Map (oldRecords)) ؛ باطل AfterDelete (تعيين oldRecords) ؛ باطل AfterUndelete (تعيين oldRecords) ؛ منطقية IsDisabled () ، } فئة عامة TriggerClass {public static void demo (ITriggerPattern pattHandler) {if (Trigger.isBefore) {if (Trigger.isInsert) pattHandler.BeforeInsert (trigger.new)؛ إذا (Trigger.isUpdate) pattHandler.BeforeUpdate (trigger.newMap، trigger.oldMap) ؛ إذا (Trigger.isDelete) pattHandler.BeforeDelete (trigger.oldMap) ؛ } if (Trigger.isAfter) {if (Trigger.isInsert) pattHandler.AfterInsert (trigger.newMap) ؛ إذا (Trigger.isUpdate) pattHandler.AfterUpdate (trigger.newMap ، trigger.oldMap) ؛ إذا (Trigger.isDelete) pattHandler.AfterDelete (trigger.oldMap) ؛ إذا (Trigger.isUnDelete) pattHandler.AfterDelete (trigger.oldMap) ؛ }}}

 

نمط الإستراتيجية في Salesforce

يحتوي على نمط تصميم سلوكي يسمح لنا بتحديد عائلة من الخوارزميات مما يجعلها قابلة للتحديد وقابلة للتبديل في وقت التشغيل.

على سبيل المثال:

public Interface paymentGateway {Boolean pay (Double amt)؛ } public class creditCard تنفذ paymentGateway {String name؛ بطاقة سلسلة سلسلة cvv ؛ تاريخ الظبية الدفع المنطقي العام (مبلغ مزدوج) {// واجهة بطاقة الائتمان باستخدام Rest API}} فئة عامة mQuickPaymentStrategy تنفذ paymentGateway {String emailId؛ الدفع المنطقي العام (مبلغ مضاعف) {// واجهة Mobikwik باستخدام Rest API}}

 

نمط تصميم "مشغل واحد لكل كائن" في Salesforce

يوصى بشدة من قبل Salesforce وأيضًا ممارسة جيدة لكتابة مشغل واحد على كل كائن لأنه إذا كتبنا عدة مشغلات على كل كائن ، يمكن أن يحدث تعارض وأخطاء نظرًا لعدم وجود ترتيب للتنفيذ في المشغل.

يمكننا الاستفادة من متغيرات السياق لاستدعاء طرق مختلفة من فئة المساعد.

على سبيل المثال:

تشغيل AccountTrigger على الحساب (بعد الإدراج ، بعد التحديث) {if (Trigger.isAfter && Trigger.isInsert) {UpdateCase.caseMethod (Trigger.new) ؛ UpdateOpportunity.oppMethod (Trigger.new) ؛ }}

 

اترك تعليقا

يستخدم هذا الموقع نظام Akismet لتقليل الرسائل الضارة. تعرف كيف تتم معالجة بيانات تعليقك.