질문을 삭제하지 말아주세요.!
 
1
0
-1

products 테이블에 담긴 데이타를 다른 사이트로 전송(db to rest , db to db, db to excel) 하는 로직을 만들고 있습니다.

product 모델에 있는 sendProduct(상품데이타 전송하는) 함수가 목표 사이트 마다 다르게 구현 해야 하는데요.

그렇다면 product 모델을 다시 상속해서 productAsite, PrductBsite, ProductCsite 이럴게 하위 클래스로 상속하고

각각의 클래스마다 sendProduct 함수를 구현하는게 라라벨에서 지원을 하는지 여쭙습니다.

혹은 좀더 좋은 방법이 있을까요? 

    CommentAdd your comment...

    3 answers

    1.  
      2
      1
      0

      객체지향의 "다형성"의 아주 기본적인 유스케이스로 사료됩니다.

      모델에 전부 구현하는 것도 가능합니다만(Fat model이라 부릅니다)... 모델의 역할은 아닌듯하고, 서비스 클래스의 역할로 보입니다.

      같은 Product 모델을 조회해서 각각의 성격에 맞는 sendProduct()를 구현한 RestExporter, DBExporter, ExcelExporter 클래스를 만들면 될 듯 합니다.

      Asite가 Rest를 사용하기 때문에 Product::sendAsite()를, 다른 사이트가 엑셀을 사용하기 때문에 Product::sendBsite를 구현하는 것은 절차지향의 구현방식입니다. Asite와 Xsite 모두 Rest를 사용하는데 스펙이 다르다면, BaseRestExporter를 만든 후, AsiteExporter extends BaseResetExporter로 확장해 가는 것이 좋을 듯합니다.


      스펙을 정확히 모르는 상태지만, 아래 그림은 말씀하신 내용에 맞는 Non-trivial 서비스의 일반적인 설계입니다 (화살표는 호출방향)

      a) Invoker, b) Application, c) Domain & Infra

      1) 컨트롤러, 커맨드, 큐 등 여러 곳에서 공통적으로 쓰는 로직을 추출해 놓은 것이라 생각하면 됩니다.
      2) 필요에 따라 RestExporter::sendProduct(), DBExporter::sendProduct(), ExcelExporter::sendProduct()를 호출합니다(Strategy와 Factory 패턴을 찾아보세요).
      3) 2)의 sendProduct()에서 Product 모델을 사용하여 쿼리를 하게 될겁니다.

      웹 요청만 처리한다면 이상의 모든 내용은 컨트롤로에서 전부 구현할 수도 있습니다(Fat controller라고 부릅니다). 

        CommentAdd your comment...
      1.  
        1
        0
        -1

        upvote 메일이 와서 답변을 다시 보니 화살표 방향이 살짝 뒤집어진 곳이 있네요(대세에 지장은 없는.. 그러나 뒤집혀서 쪽팔린다는.. ㅎ). 구현 다 되면 서비스 한번 구경시켜주세요~

          CommentAdd your comment...
        1.  
          1
          0
          -1

          감사합니다. ^^;;

          정말 많은 도움 되었습니다.


            CommentAdd your comment...