Не уверен, где разместить мои модели / объекты в проекте - PullRequest
0 голосов
/ 31 декабря 2018

Я читал тонны тем и до сих пор не уверен, что понял.Прежде всего, я хочу убедиться, что я правильно понял основы или, по крайней мере, это хороший способ начать меньший проект.

  • Пока не будет написано ни одного модульного теста.
  • Полных моделей не будет (достаточно много операций 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 - это просто копия моей сущности.

Не стесняйтесь комментировать что-либо о приведенной выше структуре / коде и мотивировать, как мне нужно внести изменения, которые вы говорите.

Имои вопросы

  1. Должны ли мои бизнес-правила соответствовать моим моделям Web.Domain.entities?
  2. Действительно ли мне нужна ViewModel, и если я использую эту технику, я использую ее дляотображение между моими сущностями и ViewModels (не фанат больших фреймворков).

  3. Заполнение сущности сегодня я использую «старый способ» и принимаю IDataReader в качестве параметра для моего конструктора, ивызывается из DAL, которые также возвращают Entitу.Если я хочу удалить зависимость от IDataReader, это DI, я должен использовать?

...