rights reserved. Developer Zone ヘキサゴナルアーキテクチャを利⽤した Lambda 関数のドメインモデルの実装 Live Atsushi Fukui S E S S I O N I D : D E V - 0 9 Senior Solutions Architect, Serverless Specialist Amazon Web Services Japan
rights reserved. ポートクラス(from Primary) class RecipientInputPort(IRecipientInputPort): def __init__(self, recipient_output_port: IRecipientOutputPort, slot_output_port: ISlotOutputPort): self.__recipient_output_port = recipient_output_port self.__slot_output_port = slot_output_port def make_reservation(self, recipient_id:str, slot_id:str) -> Status: status = None recipient = self.__recipient_output_port.get_recipient_by_id(recipient_id) slot = self.__slot_output_port.get_slot_by_id(slot_id) ..... # --------------------------------------------------- # execute domain logic # --------------------------------------------------- ret = recipient.add_reserve_slot(slot) ..... if ret == True: status = Status(200, "The recipient's reservation is added.") else: status = Status(200, "The recipient's reservation is NOT added!") return status
rights reserved. インターフェイスクラス( from Primary) from abc import ABCMeta, abstractmethod from status import Status class IRecipientInputPort(metaclass=ABCMeta): @abstractmethod def make_reservation(self, recipient_id:str, slot_id:str) -> Status: raise NotImplementedError()
rights reserved. Pure Logicに対するUnite Test • 純粋な要件に対してテストケースを書く 他のAWSサービスとの結合⽅法に対する知識を含まない • テストが軽くなるため、開発やデリバリーを⾼速化できる • 外部のアーキテクチャが変更された時にも、テストケースが影響を 受けにくい テストの陳腐化が防げる テストのメンテナンスコストの軽減 • Pure Logicなので意図が伝わりやすい、理解しやすい テストケースから仕様を理解出来る