Проблем с внедряването на N-Tier архитектура в ASP.net MVC [затворен]

Искам да внедря правилна n-tier архитектура в asp.net mvc, но имам някакъв проблем с това [staffController].

ето моят код:

Домейн

public interface IEntity {
       int Id { set; get; } // all entities have a ID property
}

public interface IStaff : IEntity {
       string Name { set; get; } // staff entity has NANE
}

public class Staff : IStaff {
       public int Id { get; set; }
       public string Name { get; set; }
}

ViewModel

public interface IViewModel {
    int Id { set; get; } // based on IEntity , all ViewModel have ID too
}

public interface IStaffViewModel : IViewModel {
    string Name { set; get; }
    string NameId { get; }
}

public class StaffViewModel : IStaffViewModel {
    public int Id { get; set; }
    public string Name { get; set; }

    public string NameId
    {
        get { return "Name" + Id;}
    }
}

Общо хранилище

public interface IRepository<TEntity, out TViewModel> 
                            where TEntity : IEntity 
                            where TViewModel : IViewModel {
        TViewModel Load(int id);
}

public class Repository : IRepository<IEntity,IViewModel>
    {
        public IViewModel Load(int id)
        {
            // load from database -> Map entity to Viewmodel and post ViewModel
        }
    }
}

Сервиз

public interface IService<in TEntity, out TViewModel> 
                         where TEntity : IEntity 
                         where TViewModel : IViewModel {

    TViewModel LoadEntity(int id);
}
public class Service<TEntity, TViewModel> 
                        : IService<TEntity , TViewModel>
                        where TEntity : IEntity 
                        where TViewModel : IViewModel {
    private readonly IRepository<TEntity, TViewModel> _repository;

    public Service(IRepository<TEntity,TViewModel> repository )
    {
        _repository = repository;
    }

    public TViewModel LoadEntity(int id)
    {
        return _repository.Load(id);
    }
}

Обслужване на персонал

public interface IStaffService : IService<IStaff,IStaffViewModel> { }
public class StaffService : Service<IStaff,IStaffViewModel>, IStaffService
{
    private readonly IRepository<IStaff, IStaffViewModel> _repository;

    public StaffService(IRepository<IStaff, IStaffViewModel> repository) : base(repository)
    {
        _repository = repository;
    }
}

Базов контролер

public class BaseControlle
{
    private readonly IService<IEntity, IViewModel> _service;

    public BaseControlle(IService<IEntity,IViewModel> service )
    {
        _service = service;
    }
}

Контрольорът на персонала има проблем с базата (услугата)

public class StaffController : BaseControlle
{
    public StaffController(IStaffService service) : base(service)
    {
       // **I have Problem here with base(service)
    }
}

Има ли други проблеми в моя код? мога ли да се доверя на тази архитектура за разработване на корпоративни решения?


person Mironline    schedule 09.11.2015    source източник
comment
Може също да искате да следвате стълбищния модел, т.е. разделяне на интерфейси и конкретни класове. Освен това на корпоративно ниво вероятно искате да следвате принципите на SOLID   -  person Corak    schedule 09.11.2015


Отговори (1)


За да отговорите на въпроса във вашия код:
Трябва да направите BaseController общ:

public class BaseController<TEntity, TViewModel>
{
    private readonly IService<TEntity, TViewModel> _service;

    public BaseControlle(IService<TEntity, TViewModel> service)
    {
        _service = service;
    }
}

public class StaffController : BaseController<IStaff, IStaffViewModel>
{
    public StaffController(IStaffService service) : base(service)
    {
    }
}
person Daniel Hilgarth    schedule 09.11.2015