アンチコリュプションレイヤー(ACL)は、統合されるシステム間で望ましくないロジック、モデル、またはデータの "漏れ" を防ぐために使用されます。このパターンは、片方のドメインモデルを他方から隔離するための翻訳者、アダプター、ファサードの中間層を実装します。
例えば、古い会計システムと新しいeコマースプラットフォームを統合する際に、ACLはデータ形式の変換、検証、および両者のビジネスルールの正しい処理を可能にします。
class LegacyUserDTO: def __init__(self, legacy_id, fname, lname): self.legacy_id = legacy_id self.fname = fname self.lname = lname class ModernUser: def __init__(self, id, first_name, last_name): self.id = id self.first_name = first_name self.last_name = last_name def acl_translate(legacy_user): return ModernUser( id=legacy_user.legacy_id, first_name=legacy_user.fname, last_name=legacy_user.lname )
アンチコリュプション層の代わりにシリアル化やORMを使用できますか?
シリアル化とORMはデータの転送と保存を容易にしますが、ドメインモデルを外部の影響から保護しません。ACLだけがロジックの隔離と両システムのビジネスルールの整合性を提供します。
ACLはどのような場合に必要ありませんか?
ACLは、両システムが同一または合意されたモデルを持ち、1つのチームによって制御されている場合には通常不要です。しかし、実際にはわずかな違いでもACLなしでは問題を引き起こす可能性があります。
ACLなしで直接統合を行った場合、何が起こりますか?
外部システムの変更が主要システムのビジネスロジックに悪影響を与えたり、バグを引き起こす高いリスクがあります。