�@

�A��
.NET�Ŏn�߂�f�U�C���p�^�[��

��5�� Composite�p�^�[���𓱂��o�����߂̏���

�\�\ ���t�@�N�^�����O�ɂ�蓱���o��Collecting Parameter�p�^�[�� �\�\

���z�V�X�e��������Ё@���� �f��
�iMicrosoft MVP 2005 - Solutions Architect�j
2005/06/08
Page1 Page2


Back Issue
1
.NET�J���ɂ�����f�U�C���p�^�[���̗L�p��
2
���܂��f�U�C���p�^�[�����g�����߂̐S��
3
���t�@�N�^�����O�ɂ�蓱���o��Strategy�p�^�[��
4
���t�@�N�^�����O�ɂ�蓱���o��Template Method�p�^�[��
5
Composite�p�^�[���𓱂��o�����߂̏���
6
���t�@�N�^�����O�ɂ�蓱���o��Composite�p�^�[��
7
�f�U�C���p�^�[���̗��Ƃ���

�@�O���܂ł́A�u�R�[�h�̕s�g�ȓ����v�ł���u�d�������R�[�h�v���������邽�߂̃��t�@�N�^�����O����f�U�C���p�^�[���𓱂��o�����@�������‚��Љ���B

�@����Ǝ���́A�u��{�f�[�^�^�ւ̎����v���������邽�߂̃��t�@�N�^�����O����A�f�U�C���p�^�[���𓱂��o�����@���Љ��B

�@��{�f�[�^�^�iC#�ł�int�^��string�^�Ȃǁj�ւ̎����Ƃ́A����������΁u�葱���I�����ւ̎����v�ł���B�N���X�������Œ�`���Ďg�p��������A���ꂪ�񋟂����{�f�[�^�^�݂̂��g�p���ď������L�q���Ă��܂��悤�ȌX��������ꍇ���B�I�u�W�F�N�g�w�����n�߂��΂���̂���́A�M�҂����̌X���ɂ������B�����A�������\�b�h�⋐��ȃN���X�΂�����쐬���Ă���悤�ł���Β��ӂ��ׂ��ł���B�֘A����f�[�^�Ƃ���𑀍삷��葱�����ЂƂ܂Ƃ߂Ƃ��ēK�؂ɍ\��������悤�ɐS�|�������B

�@�Ȃ��{�e�̊J���菇�́A���ׂăe�X�g�쓮�J���iTDD�FTest-Driven Development�j�̃X�^�C���ōs���i�e�X�g�쓮�J���ɂ‚��ẮA�u�e�X�g�쓮�J���c�[���őO���v���Q�Ƃ��ꂽ���j�B�{�e�̃T���v���E�R�[�h�́A�lj������R�[�h�͐F�A�폜�����R�[�h�͐ԐF�ŕ\�����Ă���B

���t�@�N�^�����O�O�̐݌v

�@����Ǝ���Ŏg�p����T���v���E�R�[�h�́A�v���W�F�N�g�̐i���傭���Ǘ�����u�g���b�L���O�E�V�X�e���v�̈ꕔ�ł���B���̃V�X�e���ɂ́A�u���[�U�[�E�X�g�[���[�v�Ɓu�v���O���}�E�^�X�N�v���g�p�����B�ȍ~�A���ꂼ��u�X�g�[���[�v�A�u�^�X�N�v�ƋL�q����B

�@�܂��A�X�g�[���[�ƃ^�X�N�̊֌W���ȒP�ɐ�������B

�@�X�g�[���[�ɂ͌ڋq�̗v�����L�q����A��ӂ̎��ʔԍ��ƗD�揇�ʂ��ݒ肳���B�X�g�[���[�͊J���҂ɂ���ĕ����̃^�X�N�ɕ��������B�����1�‚̃X�g�[���[�ɂ͔C�ӂ̐��̃^�X�N���܂܂�邱�ƂɂȂ�B

�@�^�X�N�ɂ̓X�g�[���[���������邽�߂ɕK�v�ȃv���O���}�̍�Ɠ��e���L�q����A��ӂ̎��ʔԍ��ƑΏۂ̃X�g�[���[�ԍ����ݒ肳���B�v���O���}�̓^�X�N���������邽�߂̍H�������ς������\��|�C���g��ݒ肵�A��������������Ύ����|�C���g��ݒ肷��B

�@���Ƀg���b�L���O�E�V�X�e�����\������N���X�ɂ‚��Đ�������B

�@�^�X�N�A�X�g�[���[�A�X�g�[���[�̏W���͂��ꂼ��Task�N���X�AStory�N���X�AStories�N���X�Ƃ����u�h���C���E�N���X�v�i�����̈��\���N���X�j�Ƃ��Ď�������AStoriesWriter�N���X�͂����̃h���C���E�N���X�̏���XML�����Ƃ��ďo�͂���B

�@StoriesWriter�N���X�ɂ���ďo�͂����XML�����́A�ȉ��̂悤�ȃc���[�\�����`������B

StoriesWriter�N���X�ɂ���ďo�͂����XML�����̃c���[�\��

�@����ł͎��ۂɃR�[�h�����Ă����������B

�@����Ǝ���ōs�����t�@�N�^�����O�ł́A�h���C���E�N���X�iTask�N���X�AStory�N���X�AStories�N���X�j�ɑ΂��Ă̕ύX�͍s�킸�AStoriesWriter�N���X�ɑ΂��Ă̂ݕύX���s���B

�@�h���C���E�N���X�̃e�X�g�E�R�[�h�Ǝ����R�[�h�ɂ‚��ẮAC#�̏ꍇ�����������AVB.NET�̏ꍇ�����������Q�Ƃ��Ă������������B

��StoriesWriter�N���X�̃e�X�g�E�R�[�h

�@���āAStoriesWriter�N���X�ɑ΂���e�X�g�E�R�[�h���L�q�����i�K�ŁAStoriesWriter�N���X�����̂悤�ɐ݌v�����B

StoriesWriter�N���X��GetContents���\�b�h�́A�R���X�g���N�^�̃p�����[�^�Ƃ��Ĉ����n���ꂽStories�I�u�W�F�N�g�̓��e��XML�`���̃e�L�X�g�Ƃ��ďo�͂���B

�@���̃e�X�g�E�R�[�h�͈ȉ��̂悤�ɂȂ��Ă���B

using System;
using NUnit.Framework;
using DesignPatterns.Core.Composite;

namespace DesignPatterns.Tests.Composite
{
  // StoriesWriter�̃e�X�g�E�N���X

  [TestFixture] public class StoriesWriterTest
  {
    private StoriesWriter target;

    [Test] public void �V���v����XML���o�͂���()
    {
      target = new StoriesWriter(CreateSimpleStories());

      string expected =
        "<stories>" +
          "<story no=\"1\" priority=\"5\">" +
            "<content>�X�g�[���[��XML�ŏo�͂���B</content>" +
            "<task no=\"1\" storyNo=\"1\">" +
              "<actualPoint isOver=\"True\">2.0</actualPoint>" +
              "<estimatedPoint>1.5</estimatedPoint>" +
              "<content>StoryWriter���쐬����B</content>" +
            "</task>" +
          "</story>" +
        "</stories>";

      Assert.AreEqual(expected, target.GetContents(),
        "�o�͂��ꂽXML���Ⴂ�܂��B");
    }

    // �V���v���ȃX�g�[���[�̏W���𐶐�����
    private Stories CreateSimpleStories()
    {
      Stories stories = new Stories();

      Story story = new Story(1);
      story.Priority = 5;
      story.Content = "�X�g�[���[��XML�ŏo�͂���B";

      Task task = new Task(1);
      task.ActualPoint = 2.0f;
      task.EstimatedPoint = 1.5f;
      task.Content = "StoryWriter���쐬����B";

      story.Add(task);
      stories.Add(story);

      return stories;
    }
  }
}
StoriesWriter�N���X�̃e�X�g�E�R�[�h�iC#�j

��StoriesWriter�N���X�̏����R�[�h�i���t�@�N�^�����O�O�j

�@�����āA�e�X�g���p�X����StoriesWriter�N���X�̎����R�[�h���ȉ��Ɏ����B

using System;
using System.Text;

namespace DesignPatterns.Core.Composite
{
  // StoriesWriter�N���X
  public class StoriesWriter
  {
    private Stories stories;

    // �R���X�g���N�^

    public StoriesWriter(Stories stories)
    {
      this.stories = stories;
    }

    // XML�𕶎���ŏo�͂���
    public string GetContents()
    {
      StringBuilder xml = new StringBuilder();
      xml.Append("<stories>");

      foreach (Story story in stories)
      {
        xml.Append("<story");
        xml.Append(" no=\"");
        xml.Append(story.No.ToString());
        xml.Append("\"");
        xml.Append(" priority=\"");
        xml.Append(story.Priority.ToString());
        xml.Append("\">");

        xml.Append("<content>");
        xml.Append(story.Content);
        xml.Append("</content>");

        foreach (Task task in story)
        {
          xml.Append("<task");
          xml.Append(" no=\"");
          xml.Append(task.No.ToString());
          xml.Append("\"");
          xml.Append(" storyNo=\"");
          xml.Append(task.StoryNo.ToString());
          xml.Append("\">");

          xml.Append("<actualPoint");
          xml.Append(" isOver=\"");
          xml.Append(task.IsOverPoint().ToString());
          xml.Append("\">");
          xml.Append(task.ActualPoint.ToString("##.0"));
          xml.Append("</actualPoint>");

          xml.Append("<estimatedPoint>");
          xml.Append(task.EstimatedPoint.ToString("##.0"));
          xml.Append("</estimatedPoint>");

          xml.Append("<content>");
          xml.Append(task.Content);
          xml.Append("</content>");

          xml.Append("</task>");
        }

        xml.Append("</story>");
      }

      xml.Append("</stories>");

      return xml.ToString();
    }
  }
}
���t�@�N�^�����O�O��StoriesWriter�N���X�̎����R�[�h�iC#�j

�����{��e�X�g�E���\�b�h��

�@�Ƃ���ŁA����̃e�X�g�E�R�[�h�́A�O��܂ł̃e�X�g�E�R�[�h�Ƃ͈قȂ�A�e�X�g�E���\�b�h�����{��ŋL�q����Ă��邱�ƂɋC�t���Ă������������낤���B

�@���{��e�X�g�E���\�b�h�������܂����p����΁A�e�X�g�Ώۂ̃N���X���ǂ̂悤�ȃe�X�g�d�l�ɏ]���Ď�������Ă��邩����ڗđR�i��傤����j�ƂȂ�B����͌��؉”\�ȃh�L�������g�Ƃ��Ẵe�X�g�E�R�[�h�̎��Y�I���l�̌���ɂ‚Ȃ���B

�@�ȉ��́ANUnit.GUI�ŏ�L�̃e�X�g�E�R�[�h�����s�������ʂ��B�c���[�i��ʍ����j�㕔�̓��{��e�X�g�E���\�b�h���Ɖ����̉p��e�X�g�E���\�b�h�����r���Ă݂�΁A���̌��ʂ��������Ă��������邾�낤�B

NUnit.GUI�̃��j�b�g�E�e�X�g���s����

�@�ȏ�̏������������Ƃ���ŁA���t�@�N�^�����O�ɐi�����B


�@INDEX
�@ .NET�Ŏn�߂�f�U�C���p�^�[��
�@ ��5�� Composite�p�^�[���𓱂��o�����߂̏���
  1�D���t�@�N�^�����O�O�̐݌v
�@   2�DComposite�p�^�[���𓱂��o�����߂̏���
�@
CfbNXEy[Ww �@�u.NET�Ŏn�߂�f�U�C���p�^�[���v


Insider.NET �t�H�[���� �V���L��
  • ��2��@�Ȍ��ȃR�[�f�B���O�̂��߂� �i2017/7/26�j
    �@�����_���ŋL�q�ł��郁���o�̑����Athrow���Aout�ϐ��A�^�v���ȂǁAC# 7�ɂ͈ȑO�����R�[�h���Ȍ��ɋL�q�ł���悤�ȋ@�\����������Ă���
  • ��1��@Visual Studio Code�f�o�b�O�̊�b�m�� �i2017/7/21�j
    �@Node.js�v���O�������f�o�b�O���Ȃ���AVisual Studio Code�ɓ�������Ă���f�o�b�O�@�\�̊�{�́u�L�v���}�X�^�[���悤
  • ��1��@���ĂȃR�[�f�B���O�̂��߂� �i2017/7/19�j
    �@C# 7�Œlj����ꂽ�V�@�\�̒�����A�u���l���e�����\���̉��P�v�Ɓu���[�J���֐��v���Љ��B�����͕�����₷���R�[�h���L�q����̂Ɏg����
  • Presentation Translator �i2017/7/18�j
    �@Presentation Translator��PowerPoint�p�̃A�h�C���B�v���[���e�[�V�������̎����̕t����A������ł̎��^�����A�X���C�h�̖|����s����
��IT���[���}�K�W���@�V������X�^�b�t�̃R���������[���œ͂��܂��i�����j

���ڂ̃e�[�}

Insider.NET �L�������L���O

�{�� ����