2017-02-02 13 views
1

私のプロジェクトにはWeb APIコントローラ、サービス、およびリポジトリがあります。プロパティ値の更新に関するベストプラクティス(コントローラまたはサービス層?)

public AdminCollaborators UpdateCollaborator(AdminCollaborators collaborator, Guid actorUserId) 
    { 
     collaborator.ModifiedBy = actorUserId; 
     collaborator.ModifiedOn = DateTimeHelper.Instance.GetCurrentDate(); 
     _collaboratorRepository.UpdateCollaborator(collaborator,actorUserId); 
     return _collaborationRepository.SaveChanges(); 
    } 

通常、サービスは(イム間違っていない場合)は、ビジネスロジックを実装することになっている

public IActionResult Update(CreateCollaboratorViewModel collaboratorViewModel) 
    { 
     //Is it good to set values here in Controller or in Service layer ? 

     AdminCollaborators collaborator = new AdminCollaborators(); 
     collaborator.Description = collaboratorViewModel.Description; 
     collaborator.ModifiedBy = _myContext.CurrentUserId; 
     var output = _collaboratorService.UpdateCollaborator(collaborator, _myContext.CurrentUserId); 
     return Ok(new WebApiResultValue(true, output, "update successful.")); 
    } 

サービス:コントローラは次のようにUpdateメソッドを得ました。コントローラまたはサービスのプロパティ値を更新する必要があるとアドバイスしてください。

おかげ

答えて

0

これは、DDDっぽいarchitcturesを実施するための一般的な結果です。ドメインが単純過ぎると、それぞれの抽象化の程度が多かれ少なかれ、同じことをする多くのレイヤーになります。

ところで、あなたは正しい場所にもっと複雑なものを置くことができる日があると判断したので、このルートに進みます。それ以外の場合は、レイヤーのないプロジェクトをnレイヤーにするために大規模なリファクタリングを行う必要があります。

とにかく、サービス層で更新を行う必要があります。 updateCollaboratorDtoはあなたドメインオブジェクトに更新したいデータが付属していなければならないDTOでなければなりません

collaboratorService.Update(collaboratorId, updateCollaboratorDto); 

を次のようにおそらく、あなたのサービス層が見えるはずです。

DTOドメインオブジェクト betweeenマッピングのとして、あなたは自動的にそれらすべてをマッピングするためにAutoMapperを使用する必要があります。

あなたはWebAPI/RESTful APIの世界にいると、のモデルについて話していることに注意してください。私はViewModel sufixをDtoに置き換えて名前を変更します。

関連する問題