1

CRUD操作とデータアクセスメソッド(例:ストアドプロシージャ)はリポジトリパターンのようであり、サービスレイヤはリポジトリのメソッドを利用してジョブを実行しています。リポジトリパターンとサービスレイヤ

私の質問は、リポジトリのメソッドを使用しないサービスレイヤにメソッドを配置できますか?例えば

、私のリポジトリはこれらのメソッドを持っている場合、

public interface IRepository<T> 
{   
    void Add(T entity); 
    void Update(T entity); 
    void Delete(T entity); 
} 

とIStudentServiceクラスの

public interface IStudentService 
{ 
    void AddNewStudent(Student student); 
    void UpdateStudent(Student student); 
    void DeleteStudent(Student student); 

    ExcelImportVM GetStudentExcelExport(List<Students> list); 
    List<SelectListItem> GetDateRange(); 
} 

とStudentServiceクラスの実装:

public class StudentService : IStudentService 
    { 
     private IStudentRepository _repository;  

     public ShopLevelDashService(IStudentRepository repository) 
     { 
      _repository= repository;   
     } 

     public void AddNewStudent(Student student) 
     { 
      return _repository.Add(student); 
     } 

     // ..UpdateStudent & DeleteStudent methods 

     public List<SelectListItem> GetDateRange() 
     { 
      var dateRange = new List<ColumnValuesVM>() 
      { 
       new ColumnValuesVM { Id = 1, Value = "test" }, 
       new ColumnValuesVM { Id = 2, Value = "test2" } 
      }; 

      var selectList = new List<SelectListItem>(); 

      // ..foreach 

      return selectList; 
     } 

     ExcelImportVM GetStudentExcelExport(List<Students> list) 
     { 
      // ..codes 

      return viewModel; 
     } 
    } 

を置くために、このメイクセンスをいサービス中のStudentExcelExport()およびGetDateRange()のような方法そのリポジトリにメソッドを使用しないクラス? (おそらく例:_repository.GetDateRange()

また、コントローラに入れる方が良いですか?

+1

サービスはビジネスデータのみを返す必要があります。ビジネス・データをビュー・モデルおよびその他の表示可能なタイプのUIに変換することは、コントローラー・レベルで行う必要があります。したがって、このサービスのメソッドはデータのみを返す必要があり、コントローラではそのデータからselectitemのリストを作成する必要があります。 –

答えて

0

@Chetanが指摘したように、サービスレイヤーはデータアクセスレイヤー(DAL)です。したがって、あなたのサービスにStudentExcelExport()GetDateRange()を使用することはベストプラクティスではありません。サービス層は、データベース操作を処理するメソッドのみを持つ必要があります。

両方の方法として、ビューコンポーネントを準備するだけで、コントローラレベルにする必要があります。他の複雑なロジックの場合は、DALとミックスする代わりにビジネスロジックレイヤーを使用できます。

コントローラに入れておく方が良いですか?

答えはコントローラーに入れます。

希望すると便利です。

+0

こんにちはDiv、あなたのポイントに基づいて、データベース操作を扱わないすべてのメソッドは、コントローラ内に留まる必要があります。あなたは複雑な論理をより詳しく説明できますか? – pavilion

+0

はい!しかし、正確にはそうではありません。たとえば、トークンを使用したユーザーのログイン。最後に、そのトークンを復号化して、ユーザーが有効なユーザーかどうかを確認する必要があります。今、復号化ロジックは複雑なロジックであり、データベースの権利を扱っていませんか?論理がコントローラに送られるべきではない、それはBL(ビジネスロジック)にあるべきであり、それは私が複雑な論理を意味するものです。 http://imgr.es/3OI3 –

+0

したがって、基本的に私のGetDateRange()関数にforeachループで学生情報を取得するデータベース操作が含まれている場合は、まずこの関数をコントローラに入れ、その関数の内部でビジネスロジック(_studentService.GetStudent(student))とミックスする必要があります。 – pavilion

関連する問題