Unity의 Script 구성 5에 대해 생각해 보십시오.
7125 단어 Unity
> 요약문은 여기에 있다.
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.cspublic class NumberDaoFactory
{
public static INumberDao Create(string key)
{
return new NumberFile(key);
}
}
예를 들어 다음과 같이 개작하면 상술한 유쾌한 요구도 받아들일 수 있을 것이다.
NumberDaoFactory.cspublic 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
남은 과제
나는 이번에 고려한 과제를 한번 시험해 볼 수 있다고 생각한다.그래서 마지막으로 경과를 되돌아보고 싶다.
Reference
이 문제에 관하여(Unity의 Script 구성 5에 대해 생각해 보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tricrow/items/127aee5fff8f3cfab8c8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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");
public void Pow(int number)
{
var Number = new Number(number);
Number.Pow();
var dao = NumberDaoFactory.Create("pow");
dao.Save(Number);
ReactNum.Value = Number.Value;
}
public class NumberDaoFactory
{
public static INumberDao Create(string key)
{
return new NumberFile(key);
}
}
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);
}
}
}
private void Start()
{
// Modelの値の保持
NumberMediator = MediatorFactory.Create<NumberMediator>();
이번에 사용한 샘플은 Giithub의 다음 URL에 올라왔다.
https://github.com/nakatatsu/unity-sample
남은 과제
나는 이번에 고려한 과제를 한번 시험해 볼 수 있다고 생각한다.그래서 마지막으로 경과를 되돌아보고 싶다.
Reference
이 문제에 관하여(Unity의 Script 구성 5에 대해 생각해 보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tricrow/items/127aee5fff8f3cfab8c8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Unity의 Script 구성 5에 대해 생각해 보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tricrow/items/127aee5fff8f3cfab8c8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)