Unity의 Script 구성 5에 대해 생각해 보십시오.

7125 단어 Unity
Unity의 Script 구성에 대한 고민 4의 후속.
> 요약문은 여기에 있다.

6. 팩토리의 계층 간 의존성을 이용한 드문드문 결합


그럼 지난번까지 디스플레이와 논리의 분리를 추진한 결과 뮤직비디오(R) P 모드가 됐다.

이번에는 Presenter, BusinessLogic, DataAccess 각 층의 결합 정도를 약화시키기 위해 더욱 노력할 것입니다.
지난번까지 창 클래스에서 데이터 접근층에 속하는 반을 불렀을 때 new를 사용했습니다.
NumberMediator.cs
    public void Pow(int number)
    {
        Number = new Number(number);
        Number.Pow();

        var dao = new NumberFile("pow");
        dao.Save(Number);

        Calculated(Number.Value);
    }
바로 이 부분입니다.
    var dao = new NumberFile("pow");
하지만 이렇게 쓰면 바꾸기 어렵다.예를 들어 "주소를 저장하려면 API 서버가 지나가는 DB를 사용하세요. 아, 하지만 Unity 편집기를 로컬에서 사용할 때만 로컬 PC에 저장하세요"등 변덕스러운 소리를 느낄 수 있는 요청이 왔을 때만 울어요.
또 유닛 테스트를 할 때 mock으로 교체하기 어려워 디스크마다 IO가 늦게 와서 테스트를 하는데, 분명 메디에이터 테스트일 텐데도 왠지 Dao 테스트를 해 감사할 수 없는 효과를 거뒀다.(어쩌면 Moles가 우리를 위해 무엇을 할지도 모른다.)
따라서 다음처럼 Factory를 사용하여 dao를 호출합니다.
NumberMediator.cs
    public void Pow(int number)
    {
        var Number = new Number(number);
        Number.Pow();

        var dao = NumberDaoFactory.Create("pow");
        dao.Save(Number);

        ReactNum.Value = Number.Value;
    }
이렇게 되면 팩토리 쪽에서 일괄 처리 생성이 가능하기 때문에 교체가 이뤄져도 변경은 최소한으로 이뤄질 수 있다.현재 코드는 다음과 같다
NumberDaoFactory.cs
public class NumberDaoFactory
{
    public static INumberDao Create(string key)
    {
        return new NumberFile(key);
    }
}
예를 들어 다음과 같이 개작하면 상술한 유쾌한 요구도 받아들일 수 있을 것이다.
NumberDaoFactory.cs
public class NumberDaoFactory
{
    public static INumberDao Create(string key)
    {
        if (UNITTEST) 
            return Mock(key);

        if (ENVIRONMENT == "local")
            return new NumberFile(key);
        } else {
            return new NumberApi(key);
        }
    }
}
또 프레젠터도 팩토리를 통해 미디어를 호출한다.이 말은 논리적인 부분은 step로 먼저 하면 간단하게 완성할 수 있다는 뜻이다.
NumberDaoFactory.cs 발췌문
    private void Start()
    {
        // Modelの値の保持 
        NumberMediator = MediatorFactory.Create<NumberMediator>();
또한 이 방면의 기술에 관해서는 C# 실천 개발 기법를 참고하였다.

어디까지


좋은 일처럼 느껴지는 수법이지만 부작용도 있다.할수록 많은interface가 필요합니다.
얄미운 물건이라 이번에는 각 층의 연결부를 한정했다.프레젠터가 미디어라는 곳과 비즈니스 로직에 속하는 반에서 다오라고 불렀을 때다.

실제 코드


이번에 사용한 샘플은 Giithub의 다음 URL에 올라왔다.
https://github.com/nakatatsu/unity-sample

남은 과제


나는 이번에 고려한 과제를 한번 시험해 볼 수 있다고 생각한다.그래서 마지막으로 경과를 되돌아보고 싶다.

좋은 웹페이지 즐겨찾기