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