위의 예제 코드에서 각 UseCase 는 Agile 측면을 고려해서 인터페이스를 노출하고 있습니다.
그러나, 저는 혼자 개발하기 때문에, 인터페이스를 노출하지 않고 클래스를 바로 씁니다.
다들 경험해보셨겠지만, 인터페이스와 클래스가 1:1 인 경우, 개발이 전혀 Agile 하지 않게 됩니다.
하나의 수정에 항상 두 개의 파일을 관리해야 하고, 소비 코드에서 F12 (정의로 이동)를 누르면 인터페이스 파일로 날아가기 일쑤이기 때문에 여간 귀찮은 게 아닙니다.
저도 F12 눌러서 인터페이스로 이동하는거 진짜 귀찮기는 해요… 지금도 적응이 잘 안되고…ㅎㅎ
근데 상수만 정의된 클래스, 공용 변수들은 어떻게 분류하고 관리할지, 유닛 테스팅은 어떻게 구성하는지, Repository 패턴은 어떻게 구성해놓았으며 인터페이스는 어떻게 해놨는지 등등…
이런 것들을 다른 사람들은 어떻게 관리하고 있을까… 궁금해서 한번 찾아봤습니다^^
저 프로젝트에서 구현된 방식은 규모나 기능에 비해 좀 복잡한 구조로 보이긴 하네요…
그래도 참고하기엔 좋아보여서 열심히 뜯어보고는 있습니다^^;;
@BigSquare 님은 Actor별로 구분하신다고 했는데, 혹시 Usecase가 중간에 걸친(?) 기능일 경우 분류를 어떻게 하시나요? 그것만 별도로 쪼개서 구성하시나요 아니면 최대한 근접한 기능에 같이 분류하시나요?
Core한 로직과 사용자별로 필요한 로직을 분리하고
단발성 내지는 개인한 된 use case의 로직을 분리해서
매인 스트림의 영향이 최소한 하는 clean architecture 철학을
잘설명해주셨네요(제가 잘알아들었는지 모르겠지만요^^)
class 명의 되도록 많은 의미를 내포함으로써
개발자로 하여금 해당 class의 용도파악이 쉽고 (네이밍 규칙에
얽매이지도 않고)
어차피 core단의 영향은 없으니 actor 별로 개인화된 business 처리
가 가능할것 같습니다.
code를 보고 생간한것데 interface 는 상위 레벨로 이걸 상속해서
use case를 처리하게끔 하는 일종의 가이드 역할도 할것 같습니다.
이걸 상속하고 use case를 만들어라 ? 뭐이런식으로요 @BigSquare 님이 보는 CA를 보는 지향적이랑 제가 보는 지향적은
좀 다른것 같아요 저는 Usecase보다 Domain 을 위주로 고민하고있어요
생각해보니 refactoring 을 위해서 @BigSquare 님 방식을 많이 참조해보겠습니다.
그리고 c# 에서 CA 관련 대가이시고 제가 많은 영향을 받은 분은
개인적으로 한국 아니 해외도 확실한 use case 분류및 그런 require ment 가 딱 정의되기 힘들고
언제나 중구난방일것 같습니다.
저는 이런 요구사항을 반영할때 이것 버려도 된다 생각하고 그냥 code를 남발하는 스타일입니다.
예를들어 A 요구사항에 RFP 가 처음에 정해진다면
후반부에가면 A,B,C,D 요구사항이 되는것이 현실인만큼
code를 짤때 art로 짤부분과 gabage로 짤부분을 나눠서
최악의 경우 gabage가 문제가 생겨도
그냥 버리고 나중에 생긴 D 요구사항을 A,B,C,D 를 조합하거나
아예 수시로 class를 남발해서 해결할려고 합니다.