Files
fflib-apex-extensions/docs/fflib_ClassicDomainFactory.asciidoc
T

182 lines
6.7 KiB
Plaintext

= fflib_ClassicDomainFactory Class
:Author: Wilhelmus G.J. Velzeboer
:Email: wim@velzeboer.nl
:Date: 2021
:Revision: version 1
link:README.asciidoc[<- _Back to main overview_]
Domain Factory for creating instances of Domain classes using a static map for
linking the SObjectType to its Domain Constructor implementation class.
This class is extended from
link:https://github.com/apex-enterprise-patterns/fflib-apex-common/blob/master/sfdx-source/apex-common/main/classes/fflib_Application.cls[fflib_Application.DomainFactory]
and implements the
link:fflib_IDomainFactory.asciidoc[fflib_IDomainFactory]
interface class.
== Constructor Methods
- <<constructor0, constructor: ()>> +
Empty constructor creating an instance of the Domain Factory,
particularly used for classes extending fflib_ClassicDomainFactory.
- <<constructor1, constructor: (selectorFactory, constructorTypeByObject) >> +
Constructs a Domain factory, based on a map linking the ObjectType to the implementation class type.
- <<constructor2, constructor: (selectorFactory, sObjectByDomainConstructorType) >> +
Constructs a Domain factory, based on a map linking the SObjectType to the implementation class type. +
**Use only for backwards compatibility**.
== Methods
This implementation of
link:fflib_IDomainFactory.asciidoc[fflib_IDomainFactory]
Does not add any new public or protected methods other than the following methods
which are defined in the interface
link:fflib_IDomainFactory.asciidoc[fflib_IDomainFactory].
- link:fflib_IDomainFactory.asciidoc#newInstance1[newInstance(Set<Id> recordIds)] +
Dynamically constructs an instance of a Domain class for the given record Ids
- link:fflib_IDomainFactory.asciidoc#<newInstance2[newInstance(Set<Id> recordIds, Schema.SObjectType sObjectType)] +
Dynamically constructs an instance of a Domain class for the given record Ids
- link:fflib_IDomainFactory.asciidoc#newInstance3[newInstance(List<SObject> records)] +
Dynamically constructs an instance of the Domain class for the given records
- link:fflib_IDomainFactory.asciidoc#newInstance4[newInstance(List<Object> objects, Object objectType)] +
Dynamically constructs an instance of the Domain class for the given Objects
- link:fflib_IDomainFactory.asciidoc#newInstance5[newInstance(List<SObject> records, Schema.SObjectType sObjectType)] +
Dynamically constructs an instance of the Domain class for the given records
- link:fflib_IDomainFactory.asciidoc#setMock1[setMock(fflib_ISObjectDomain mockDomain)] +
- link:fflib_IDomainFactory.asciidoc#setMock2[setMock(Schema.SObjectType sObjectType, fflib_ISObjectDomain mockDomain)] +
Registers a mock implementation in the Factory for the provided sObjectType
- link:fflib_IDomainFactory.asciidoc#setMock3[setMock(fflib_IDomain mockDomain)] +
Registers a mock in the Factory by providing a mock instance of a domain
- link:fflib_IDomainFactory.asciidoc#setMock4[setMock(Object domainType, fflib_IDomain mockDomain)] +
Registers a mock implementation in the Factory for the provided sObjectType
[[constructor0]]
=== fflib_ClassicDomainFactory()
Empty constructor creating an instance of the Domain Factory,
particularly used for classes extending fflib_ClassicDomainFactory.
==== _Signature_
```java
public fflib_ClassicDomainFactory() {}
```
___
[[constructor1]]
=== fflib_ClassicDomainFactory(selectorFactory, constructorTypeByObject)
Constructs a Domain factory, based on a map linking the ObjectType to the
implementation class type.
CAUTION: This will not check if the Apex classes actually implements the
interfaces since this is not possible in the Apex runtime at present
==== _Signature_
```java
public fflib_ClassicDomainFactory(
fflib_ISelectorFactory selectorFactory,
Map<Object, Type> constructorTypeByObject)
```
==== _Parameters_
_**selectorFactory**_ +
A reference to the Selector Factory instance,
which is an implementation of
link:fflib_ISelectorFactory.asciidoc[fflib_ISelectorFactory].
_**constructorTypeByObject**_ +
Map of Domain classes constructor by Object Type.
The Domain class constructor needs to be an implementation of
link:https://github.com/apex-enterprise-patterns/fflib-apex-common/blob/master/sfdx-source/apex-common/main/classes/fflib_IDomainConstructor.cls[fflib_IDomainConstructor]
==== _Example_
```java
public class Application
{
public static final fflib_ISelectorFactory Selector =
new fflib_ClassicSelectorFactory(
new Map<SObjectType, Type>
{
Schema.Account.SObjectType =>
AccountsSelector.class
}
);
public static final fflib_IDomainFactory Domain =
new fflib_ClassicDomainFactory(
Application.Selector,
new Map<Object, Type>
{
Schema.Account.SObjectType =>
Accounts.Constructor.class
}
);
}
```
___
[[constructor2]]
=== fflib_ClassicDomainFactory(selectorFactory, constructorTypeByObject)
Constructs a Domain factory, using an instance of the Selector Factory
and a map of Apex classes implementing fflib_ISObjectDomain by SObjectType
NOTE: Use only for backwards compatibility!
CAUTION: This will not check if the Apex classes actually implements the
interfaces since this is not possible in the Apex runtime at present
==== _Signature_
```java
public fflib_ClassicDomainFactory(fflib_ISelectorFactory selectorFactory,
Map<SObjectType, Type> sObjectByDomainConstructorType)
```
==== _Parameters_
_**selectorFactory**_ +
A reference to the Selector Factory instance,
which is an implementation of
link:fflib_ISelectorFactory.asciidoc[fflib_ISelectorFactory].
_**constructorTypeByObject**_ +
Map of Domain classes constructor by SObjectType.
The Domain class constructor needs to be an implementation of
link:https://github.com/apex-enterprise-patterns/fflib-apex-common/blob/master/sfdx-source/apex-common/main/classes/fflib_IDomainConstructor.cls[fflib_IDomainConstructor]
==== _Example_
```java
public class Application
{
public static final fflib_ISelectorFactory Selector =
new fflib_ClassicSelectorFactory(
new Map<SObjectType, Type>
{
Schema.Account.SObjectType =>
AccountsSelector.class
}
);
public static final fflib_IDomainFactory Domain =
new fflib_ClassicDomainFactory(
Application.Selector,
new Map<SObjectType, Type>
{
Schema.Account.SObjectType =>
Accounts.Constructor.class
}
);
}
```
___