One of the most common design patterns in enterprise software development is the Unit of Work, According to Martin Fowler, the Unit of Work pattern
· Keeps track of the objects affected by a
transaction
· Coordinates the writing out of changes
· Resolve the concurrency problem
A
Unit of Work keeps track of everything you do during a business transaction
that can affect the database. When you're done, it figures out everything that
needs to be done to alter the database as a result of your work.
In x++, there is a system class exists that can be used to implement the unit of work framework some of the details are as follows
UnitofWork class,
some important methods
Clears all the changes
|
|
Deletes the records on commit/saveChanges
|
|
inserts the records on commit/saveChanges
|
|
updates the records on commit/saveChange
|
|
This method will hit the server one time to
commit the changes
|
I would like to take an example to
demonstrate the use of the UoW framework,
Example 1:
If there is a need to inserts data in
a bulk to Table1.
there is also a call tJournalHeader.insert() needed in the for loop
using Unit of work
Example2:
What if we are doing bulk insert of a journal with many lines and the journal header contains some totals calculated based on its lines. It is impossible to insert lines before header since the value of the journal's surrogate key is unknown. But that would be so convenient because otherwise the header should be inserted first, then the lines and then the header should be updated with the calculated totals
AX client has the great support of the unit of work as well. This means that
form datasources can be grouped into a unit of work, so all the benefits of
simultaneous commit and surrogate key propagation will be available on forms.
There are a lot of possibilities and tricks there, so this topic worth one or
more dedicated posts as well.
No comments:
Post a Comment