ObjectSquare [2007 �N 7 ����]

�m�Z�p�u���n


DDD��ɕ�����
Domain-Driven Design�̃G�b�Z���X
��1��@�h���C���쓮�݌v�Ƃ�

������ЃI�[�W�X����
�A�h�o���X�g���f�����O�\�����[�V������
���� ����

Domain-Driven Design ̕\

Domain-Driven Design
Tackling Complexity in the Heart of Software

Eric Evans ��
Addison-Wesley, 59.99�h��
560�y�[�W
ISBN: 0-321-12521-5

�u�h���C�����f�����O�v�́A�A�v���P�[�V�����J���ɂ����čł��d�v�ȕ������Ƃ���Ă��܂��B���������̊��ɂ́A�t���[�����[�N�̎g������A�[�L�e�N�`���̐݌v���@�ȂNjZ�p�Ɋւ��������͂������񂠂���̂́A�h���C�����f�����O���̂��̂����������Ђ͂قƂ�ǖ��������ƌ����Ă������ł��傤�BEric Evans�́wDomain-Driven Design�x�i�ȍ~DDD�j�́A�u�\�t�g�E�F�A�̐^�̕��G���ɒ��킷��v�Ƃ������肩���������悤�ɁA�h���C�����f�����O�ɐ��ʂ�����g�񂾑Җ]�̏��Ђł��B

DDD�́A�C�O�ł͔��ɕ]���̍������Ђł��B�{���̏o�őO����Martin Fowler���ɂ��u���҂ł�����e���v�Ɛ��E����Ă�����AGoF��1�l�ł���Ralph Johnson���͎��g�̃u���O�Ŗ{�����u4�A5��͓ǂݒ������v�Ǝ^���𑗂��Ă��܂��BSpring Framework�̊J����Rod Johnson�����A�ŋ߂̃v���[���e�[�V������DDD���Љ�Ȃ���A�uJava EE�J���҂����ꂩ��i�ނׂ����̓��b�`�ȃh���C�����f�����v�Ɣ��\���Ă��܂��B�܂��AMDA�c�[��Sculptor�̂悤�ɁADDD��ϋɓI�ɍ̗p�����c�[����t���[�����[�N���o�ꂵ�‚‚���܂��B

�������A���{�ł͖|�󏑂����܂��ɏo�ł���Ă��Ȃ����Ƃ�����A�{���̏o�ł���3�N�߂��o�������ł��A�܂��܂��ꕔ�̒ʂ̐l�����ɂ����L�܂��Ă��Ȃ��悤�ɕM�҂ɂ͎v���܂��B�܂��A������ǂ܂ꂽ���̒�������u�{�����������ēǂ݂���Ȃ��E�E�E�v�Ƃ����Q���̐���������܂��iDDD��Ƃ������t�����邻���ł��j�B�����Ŗ{�A�ڂł́A�S3��ɕ����āADDD�̑S�e���Ȍ��ɏЉ�Ă݂����Ǝv���܂��B

DDD�̓^�C�g������͈ꌩ������ɂ����̂ł����A������p�^�[���{��1�‚ł��B�������ADDD�͑S�̂��ǂݕ��̑̍قŕ҂܂�Ă��邽�߁A�p�^�[���J�^���O���ǂݕ�����Ɨ����Ă�����́i�w�f�U�C���p�^�[���x�wJ2EE�p�^�[���x�w�G���^�[�v���C�Y�A�v���P�[�V�����A�[�L�e�N�`���p�^�[���x�Ȃǁj�ɔ�ׁA�p�^�[���̉{�����͗ǂ�����܂���B�{�A�ڂł́A���łɈ�x�ǔj���ꂽ���ɂ��L�p�Ȏ����ƂȂ�悤�ɁA�p�^�[���J�^���O�Ƃ���DDD���č\�����Ă݂܂��B

�h���C���쓮�݌v�iDomain-Driven Design�j�Ƃ�

�܂��́ADDD�Ƃ͉����A����n�߂܂��傤�B���������u�h���C���v�Ƃ́A�A�v���P�[�V�������ΏۂƂ���Ɩ��̈�̂��Ƃł��B�{���ł́A�h���C�����u�m���A�e���́A�����̈�̈�v�ƒ�`���Ă��܂��B�Ɩ��A�v���P�[�V�����ł́A�A�v���P�[�V�������v���[���e�[�V�����w�A�h���C���w�A�f�[�^�\�[�X�w��3�w�ɕ�����A�[�L�e�N�`�����嗬�ł����A���̃h���C���w�����[�U�̋Ɩ��ɒ��ړI�Ɋւ�镔���ɂȂ�킯�ł��B���������āA�h���C���w�𐳂����\�z�ł��邩�ǂ������A���̂܂܃A�v���P�[�V�����̐��ۂɉe�����܂��B

DDD�́A�I�u�W�F�N�g�w���R�~���j�e�B�̊ԂŒ��N�|���Ă����h���C�����f�����O�̃m�E�n�E��x�X�g�v���N�e�B�X���W�听�����A1�‚��݌v�v�z�^�N�w�ł��B�h���C�����f�������ꂩ��\�z���悤�Ƃ���l�ɁA�݌v��̔��f���������߂̘g�g�݂ƁA�h���C���݌v�ɂ‚��ċc�_���邽�߂̃{�L���u������񋟂�����̂ł��BTDD�iTest-Driven Development�A�e�X�g�쓮�J���j��FDD�iFeature-Driven Development�A���[�U�@�\�쓮�J���j�ƈꌩ���O�͎��Ă��܂����ADDD�͂Ȃɂ��V�����J���v���Z�X��񏥂�����̂ł͂Ȃ����Ƃɒ��ӂ��Ă��������B�������ADDD�͊�{�I�ɃA�W���C���ȊJ���v���Z�X��O��ɂ��Ă��܂��B

�h���C�����f���𒆐S�ɂ������݌v�v�z

DDD�Ƃ͂ǂ�Ȑ݌v�v�z�����Ȍ��ɐ�������ƁA�h���C�����f�����\�t�g�E�F�A�J���̒��S�ɂ����A�R�[�h��R�~���j�P�[�V��������Ƀh���C�����f���ƈ�̉������Ȃ���A�h���C�����f���𔽕��I�ɐ[�������邱�Ƃł�艿�l�̍����A�v���P�[�V�����𐶂ݏo���Ă������Ƃ���l�����ł��B�h���C�����f�������ׂĂ̒��S�ɒu���̂ŁA�u�h���C���쓮�v�Ƃ����킯�ł��B

DDD�̗v�_�́A����3�_�ɂ܂Ƃ߂��܂��B

  • �h���C�����f���́A�h���C���m����[�߂Ȃ��甽���I�iiterative�j�ɐ[�������Ă���
  • �h���C�����f�����A�J���҂ƃh���C���m�������l�i���[�U�A���Ɠ��j�Ƃ̊Ԃ̋��ʌ���ƂȂ�悤�ɂ���
  • �h���C�����f���Ǝ����R�[�h�Ƃ�������ƑΉ��t������悤�ɂ���

DDD�ł́A1�񂫂�̊J���Ŋ����ȃh���C�����f����݌v�ł���Ƃ͍l���܂���B�D�ꂽ���f���́A���x���A�v���P�[�V�����̃����[�X���J��Ԃ����ł悤�₭��������̂ƍl���܂��B���������h���C�����f���T���̉ߒ��ł́A���R�h���C���m�������������ƂƂ̑Θb���s�Œ��ł��B�J���҂Ɛ��Ƃ̊ԂŌ���̂Ȃ��R�~���j�P�[�V�������s�Ȃ��ɂ́A�h���C�����f������Ƃ������ł��錾�t�ō\�z����K�v������܂��B����ɁA�h���C�����f���̐[�����A�v���P�[�V�����ɐ��������f�����ɂ́A�����R�[�h���h���C�����f���ƑΉ��t�����Ă��Ȃ���΂Ȃ�܂���B�t�ɁA���f�����������Ă����ߒ��ŁA�V���ȃh���C���m���𔭌����邱�Ƃ�����ł��傤�B�h���C�����f���Ǝ����R�[�h�ɂ́A�o�����̊֘A�t�����K�v�ƂȂ�܂��B

DDD�̓p�^�[���{��1��

DDD�́A��L�̃m�E�n�E���p�^�[���̌`���ő̌n�����Ă��܂��B���Ѓ^�C�g���Ɂu�` Patterns�v�uPatterns of �`�v�ȂǂƓ����Ă��Ȃ����ߋC�t���ɂ����̂ł����ADDD�͂�����Ƃ����p�^�[���{��1�‚ł��B

DDD�p�^�[���́AAlexander�`�����̗p���Ă��܂��BAlexander�`���Ƃ́A�p�^�[������̐��݂̐e�ł��錚�z�Ƃ�Christopher Alexander�����A���z�̃p�^�[�����L�q����̂ɗp�����`���ł��B�ŏ��Ɏʐ^��C���X�g�Ȃǂ́u�C���[�W�v���f�ڂ���A�u�����v�u���̋L�q�v�A�ԂɁuTherefore�i�䂦�Ɂj�v�Ƃ������t������Łu�����@�̋L�q�v�u���ʁ^������̍l���^��v�A�Ō�Ɂu���̕����v�Ƃ����\���ɂȂ��Ă��܂��B�������A�L����GoF�̃f�U�C���p�^�[���Ƃ͈Ⴂ�e���ڂ��͂�����Ɛ߂ɕ�����Ă��炸�A�p�^�[���̂��Ƃ��ӎ������ɂ��̂܂ܓǂݕ��Ƃ��ēǂ߂�̂������ł��B

DDD�Ɏ��^����Ă���p�^�[���́A�S����40����܂��B�A���`�p�^�[�����܂߂�ƁA41�p�^�[���ɂȂ�܂��B

�p�^�[���� �Q�l��
I. Putting the Domain Model to Work
Ubiquitous Language ���r�L�^�X����
Model-Driven Design ���f���쓮�݌v
Hands-On Modeler ���H�I���f���[
II. Building Blocks of a Model-Driven Design
Layered Architecture �w��A�[�L�e�N�`��
Smart UI �i�A���`�p�^�[���j ������UI
Entities �G���e�B�e�B
Value Objects �l�I�u�W�F�N�g
Services �T�[�r�X
Modules ���W���[��
Aggregates �W��
Factories �t�@�N�g��
Repositories ���|�W�g��
III. Refactoring Toward Deeper Insight
Specification �d�l
Intention-Revealing Interfaces �Ӑ}�̖����ȃC���^�t�F�[�X
Side-Effect-Free Functions ����p�̖����֐�
Assertions �\��
Conceptual Contours �T�O�̗֊s
Standalone Classes �Ɨ������N���X�Q
Closures of Operations �‚�������
IV. Strategic Design
Bounded Context �R���e�L�X�g���E
Continuous Integration �p���I�ȓ���
Context Map �R���e�L�X�g�}�b�v
Shared Kernel ���L�J�[�l��
Customer/Supplier Development Teams �ڋq�^�����҂̊J���`�[��
Conformist ������
Anticorruption Layer ���s�h�~�w
Separate Ways �ʁX�̓�
Open Host Service ���J�z�X�g�T�[�r�X
Published Language ���\���ꂽ����
Core Domain ���j�h���C��
Generic Subdomains �ėp�T�u�h���C��
Domain Vision Statement �h���C���r�W����������
Highlighted Core ���j�̃n�C���C�g
Cohesive Mechanisms �ÏW���ꂽ���J�j�Y��
Segregated Core ���j�̊u��
Abstract Core ���j�̒��ۉ�
Evolving Order �i�����钁��
System Metaphor �V�X�e���̃��^�t�@
Responsibility Layers �Ӗ��̊K�w
Knowledge Level �m�����x��
Pluggable Component Framework ���E�”\�R���|�[�l���g�̃t���[�����[�N
DDD�p�^�[���̈ꗗ

�{����4���\���ɂȂ��Ă���A����������DDD�p�^�[����4�‚̕��ނɕ�����܂��B

  1. Putting the Domain Model to Work �i�h���C�����f���𓮂����j
  2. Building Blocks of a Model-Driven Design �i���f���쓮�݌v�̊�{�v�f�j
  3. Refactoring Toward Deeper Insight �i����Ȃ铴�@�֌��������t�@�N�^�����O�j
  4. Strategic Design �i�헪�I�f�U�C���j

��I���̃p�^�[���́ADDD�̖ڕW�����������̂ł��B��II���ł́A�h���C�����f�����O�̊�b�I�ȃx�X�g�v���N�e�B�X���p�^�[���ɂ܂Ƃ߂Ă��܂��B��III���́A�h���C�����f��������ɐ[�߂Ă������߂̂����H�I�ȃp�^�[����������܂��B�Ō�̑�IV���ł́A1�A�v���P�[�V�����͈̔͂𒴂��āA���̃V�X�e���Ƃ̘A�g���K�v�ȃA�v���P�[�V������A�����̃h���C�����֌W����傫�ȃv���W�F�N�g��DDD�����H���邽�߂̃p�^�[����������܂��B

SOA�ɂ��ʂ���݌v�v�z

DDD���P��A�v���P�[�V�������̃h���C�����f���̍����ɂ‚��Ă�������Ă�����̂��ƍl���Ă��܂��̂́ADDD�̈�ʂ��������������Ȃ����ƂɂȂ�܂��B�{���̑傫�ȕ������߂��IV���uStrategic Design�v�́A1�A�v���P�[�V�����̃��x���𒴂��āA�o�c�헪�I�istrategic�j�Ȏ��_��K�v�Ƃ���V�X�e���J���̕����DDD�����H������@��񎦂��Ă��邩��ł��B

SOA�͂��܁A�o�Y���[�h�ƌ�����قǂɒ��ڂ��W�߂Ă��܂��BJBI�iJava Business Integration�j�ASCA�iService Component Architecture�j�Ƃ�����SOA�̋Z�p�W���͂��łɏo�����Ă��āA�W���ɏ�������ESB�^BPM���i���[�����Ă��܂��B�������ASOA��{���ɐ���������ɂ́A�P�ɂ��������Z�p�ɏK�n���邾���ł̓_���ŁASOA�𐳂����\�z����J�����@�_���K�v�ɂȂ�͂��ł��B�c�O�Ȃ���A�s��ɂ�����Z�p�W����c�[���̏[���Ƃ͑ΏƓI�ɁA�����������p�ł���SOA�J�����@�_�͂܂��܂����n���Ă��Ȃ��̂�����ł��B

DDD��������u�헪�I�f�U�C���v��SOA�ɓ����������̂ł͂���܂��񂪁A�����������ܕK�v�Ƃ��Ă���SOA�̕��@�_�ɑ傢�Ɏ�����^���Ă������e�ɂȂ��Ă��܂��B

�A�i���V�X�p�^�[���Ƃ̈Ⴂ

�Ō�ɁA�h���C������������1�‚̃p�^�[���ł���w�A�i���V�X�p�^�[���x�iMartin Fowler���j�Ƃ̊֌W�ɂ‚��Ă��G��Ă����܂��傤�B

�A�i���V�X�p�^�[���Ƃ́A���́ianalysis�j�̃p�^�[���ł��B�f�U�C���p�^�[�����I�u�W�F�N�g�w���݌v�̒��ŌJ��Ԃ������\�����p�^�[�����������̂ł���悤�ɁA�A�i���V�X�p�^�[���̓h���C�����͂̒��ŌJ��Ԃ������\�����p�^�[�����������̂ł��B�u�ʁv�u����v�u�v��v�u�|�[�g�t�H���I�v�u�敨����v�ȂǁA�ė��p�”\�ȃh���C�����f�����p�^�[���Ƃ��Ă܂Ƃ߂��Ă��܂��B

�A�i���V�X�p�^�[����DDD�̈Ⴂ�́A�A�i���V�X�p�^�[�����u�h���C�����f���v�̃p�^�[���ł���̂ɑ΂��ADDD�́u�h���C�����f�����O�v�̃p�^�[���ł���Ƃ������Ƃł��B�A�i���V�X�p�^�[���̓h���C�����f���̋�̗��񋟂�����̂ł���ADDD�͂ǂ�����ăh���C�����f�����\�z����΂悢���������Ă������̂ł��B

DDD�ɂƂ��ẮA�A�i���V�X�p�^�[���̃��f���̓h���C�����f���T���̍ŏ��̏o���_�Ƃ��ė��p������A���łɍ\�z���ꂽ�h���C�����f�������ǂ��邽�߂̃q���g�Ƃ��ė��p������ł�����̂ł��BDDD�̑�11�́uApplying Analysis Patterns�v�ł́A���ۂɁu�݌ɊǗ��Ɖ�v�v�Ɋւ��邢���‚��̃A�i���V�X�p�^�[�����g���āA�h���C�����f������������Ă����ߒ�����������Ă��܂��B

DDD�p�^�[���J�^���O

�O�u���������Ȃ��Ă��܂��܂������A��������̐S�̃p�^�[���J�^���O�Ɉڂ�܂��BDDD�Ɏ��^���ꂽ�p�^�[����1��1�Љ�Ă����܂��傤�B����́A��I���uPutting the Domain Model to Work�v�ɂ���p�^�[�������グ�܂��B

I. Putting the Domain Model to Work�i�h���C�����f���𓮂����j

��I���ł́ADDD���ڎw���ׂ��ŏI�I�ȖڕW�𖾊m�ɂ��܂��B�h���C�����f�����L�@�I�ɋ@�\���A�J���v���W�F�N�g���쓮����G���W���ɂȂ�Ƃ͂ǂ��������ƂȂ̂����A�p�^�[���ɂ���Ď����܂��B�o�ꂷ��3�‚̃p�^�[���u���r�L�^�X�����v�u���f���쓮�݌v�v�u���H�I���f���[�v�́ADDD�̊�{3�����Ƃł������ׂ����̂ł��B

�� Ubiquitous Language�i���r�L�^�X����j�p�^�[��

�h���C���𐳂����������_��ʼn��l�̍����\�t�g�E�F�A��݌v����ɂ́A�`�[���̋��ʌ����n�����Ȃ���΂Ȃ�Ȃ��B���ʌ���̓��[�U�A�h���C���̐��Ƃ���A�݌v�ҁA�v���O���}�܂ŁA���́^�݌v���f������v���O�����R�[�h�Ɏ���܂ŁA�v���W�F�N�g�̂��ׂĂ̊֌W�ҁA���ʕ��ɍs���n���Ă��āA�����Ӗ��ŗ��������悤�ȃ��r�L�^�X�i�ՍݓI�j�Ȍ���ł���B�h���C�����f�������r�L�^�X����ƂȂ�悤�ɂ��A�h���C�����f������ăv���W�F�N�g����̂ƂȂ�悤�ɂ���B

�� Model-Driven Design�i���f���쓮�݌v�j�p�^�[��

���r�L�^�X��������������ɂ́A�v���O�����R�[�h�ɂ����Ă��h���C�����f�������m�ɕ\������Ă��Ȃ���΂Ȃ�Ȃ��B�h���C�����f���ƃv���O�����R�[�h�Ƃ���ɂ��݂��𔽉f����悤�ɕۂ‚��ƂŁA�h���C�����f���̕ύX�����̂܂܃R�[�h�̏C���𑣂��A�t�ɃR�[�f�B���O�̒��œ���ꂽ�V���ȃh���C���m���������Ƀh���C�����f���ɔ��f�����悤�ɂȂ�B���̂悤�Ƀ��f���ƃR�[�h���ٖ��Ɍ��т‚���̂����f���쓮�݌v�iMDD�j�ł���BMDD�����H����ɂ́A�J���c�[����I�u�W�F�N�g�w���v���O���~���O�iOOP�j�̂悤�ȃv���O���~���O�p���_�C�����K�v�ɂȂ�B

�� Hands-On Modeler�i���H�I���f���[�j�p�^�[��

�������f���[���v���O�����������Ȃ�������A�v���O���}���h���C�����f���ɋ����������Ȃ�������AMDD�̗��_�ł��郂�f�����O�ƃv���O���~���O�̍D�z�‚͐��܂�Ȃ��B�܂��A�`�[���̃R�~���j�P�[�V�����������Œ�؂��Ă��܂��BMDD��ʂ������r�L�^�X��������������ɂ́A���f���[�������v���O�����������Ȃ���΂����Ȃ����A�����Ƀv���O���}���h���C�����f���𗝉����A�C���ł��Ȃ���΂Ȃ�Ȃ��B�‚܂�A�`�[���̂��ׂĂ̊J���҂́A�v���O�������������f���[�łȂ���΂Ȃ�Ȃ��B

[�⑫] DDD��MDD�ADDD�ƃI�u�W�F�N�g�w��

DDD��MDD�͈ꌩ�悭�����T�O�ŁADDD�̒��ł��ꂼ�ꂪ�ǂ̂悤�Ɉʒu�t�����Ă���̂�������ɂ����Ƃ��낪����܂��B���҂̈Ⴂ�ɂ‚��ẮA����Eric Evans���uDomain-Driven / Model-Driven�v�Ƃ����L���Ő������Ă��܂��B

���e���ȒP�ɉ������ƁADDD�Ƃ́u�h���C���v���ł��d�����A��������ׂĂ̒��S�ɒu�����@�ł��BMDD�́u���f���v�����ɍs�Ȃ��݌v�Z�@���w���܂��B�h���C���̕��G���𗝉����A�\�t�g�E�F�A�ɔ��f������ł��ǂ����@�̓��f�����g�����Ƃł���i��DDD�͉��肷��j���߂ɁADDD�͂��̎������@�̒��S��MDD���̗p���܂��B����ŁAMDD�͕K�������h���C���������K�p�͈͂ł͂���܂���BUI��A�v���P�[�V�����t���[�����[�N�ȂǁA�����ɋZ�p�I�Ȃ��̂ɂ��K�p�ł��܂��BMDD��DDD�ɂƂ��ĕK�{�ł͂Ȃ����A�������R�Ȕ����Ƃ����֌W�ɂȂ�܂��B

����1�ADDD�ƃI�u�W�F�N�g�w���iOO�j�Ƃ̊֌W�ɂ‚��Ă��G��Ă����܂��B�u�h���C�����f�����O �� OO�v�Ǝv�������ł����ADDD���͕̂K������OO��O��Ƃ������̂ł͂���܂���B���������I�ɂ́AMDD�������ł���ŗǂ̃v���O���~���O�p���_�C����OOP�ł��邽�߂ɁAOO���ϋɓI�Ɏg���Ă���Ƃ������Ƃł��B�֐��^�v���O���~���O��MDD�������ł���̂ł���΁A����ł��\��Ȃ��킯�ł��i�֐��^���L���ȃh���C���͌����Ă���Ƃ͎v���܂����E�E�E�j�B

���l�ɁADDD�ł̓��f�����O�̋L�@��UML���g�����Ƃ��K�{�ł͂���܂���BDDD�ł́AUML�Ɏ����邱�ƂȂ��A�h���C�������ǂ������ł���L�@������΁A�����ϋɓI�ɍ̗p���邱�Ƃ𐄏����Ă��܂��B

����

����́A�{���̑�II���uBuilding Blocks of a Model-Driven Design�v�Ƒ�III���uRefactoring Toward Deeper Insight�v����A16�̃p�^�[�����Љ�܂��B����16�p�^�[�����ADDD�̒��S���\�����镔���ł��B�h���C�����f�����O�̃m�E�n�E�Ɛ݌v�w�j�Ƃ��A���񂩂�{�i�I�ɓW�J����Ă����܂��B���y���݂ɁB

top �y�[�W�̃g�b�v�֖߂�

© 2007 OGIS-RI Co., Ltd.
Index Next
Index Next