Я читал тонны тем и до сих пор не уверен, что понял.Прежде всего, я хочу убедиться, что я правильно понял основы или, по крайней мере, это хороший способ начать меньший проект.
- Пока не будет написано ни одного модульного теста.
- Полных моделей не будет (достаточно много операций CRUD)
Структура проекта
Web.MVC
- Основная папка для моего приложения MVC.
Web.MVC.Views
- Обработка представления моих сущностей.
Web.MVC.ViewModels
- Не используется (но правильное местоположение?)
Web.DAL
- Статические классы со статическими методами, операции CRUD.
Web.DAL.CarDAL
- Статический класс, не хочу каждый раз создавать новый экземпляр, более чистый код.
Web.DAL.CarDAL.Get()
- Статический метод, операции CRUD.
Мне нужно ссылаться на Web.Domain.entities
из Web.MVC.Controller
и Web.DAL.CarDAL
.
Пример моего Car Controller
public ActionResult Get()
{
var data = Web.DAL.CarDAL.Get();
return View(data);
}
Пример моей сущности Car. Я использую атрибуты ValidationAttributes для своих свойств, и вместо этого я должен принадлежать моей ViewModel, но не думаю, что мне нужна ViewModel.или не вижу необходимости в одном (мне просто нужно все сопоставить дважды?)
namespace Web.Domain.Entities
{
public class Car
{
public int Id { get; set; }
[Required(ErrorMessage = "RegNumber missing.")]
public string RegNumber { get; set; }
public Car() { }
public Car(IDataReader reader)
{
Id = Helper.GetSafeInt(reader, "Id");
RegNumber = Helper.GetSafeString(reader, "RegNumber");
}
public void BusinessRule1(string regNumber)
{
throw new Exception("BusinessRule1 failed.");
}
}
}
Пример моего класса DAL.
public static List<Car> Get()
{
var data = new List<Car>();
using (var connection = new SqlConnection(GlobalSettings.ConnectionString))
using (var command = new SqlCommand("GetCars", connection))
{
command.CommandType = CommandType.StoredProcedure;
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
data.Add(new Car(reader));
}
}
return data;
}
А если начать использоватьViewModel - это просто копия моей сущности.
Не стесняйтесь комментировать что-либо о приведенной выше структуре / коде и мотивировать, как мне нужно внести изменения, которые вы говорите.
Имои вопросы
- Должны ли мои бизнес-правила соответствовать моим моделям
Web.Domain.entities
? Действительно ли мне нужна ViewModel, и если я использую эту технику, я использую ее дляотображение между моими сущностями и ViewModels (не фанат больших фреймворков).
Заполнение сущности сегодня я использую «старый способ» и принимаю IDataReader в качестве параметра для моего конструктора, ивызывается из DAL, которые также возвращают Entitу.Если я хочу удалить зависимость от IDataReader, это DI, я должен использовать?