Pau*_*aul 2 s#arp-architecture asp.net-mvc-3
我有一个带有以下项目/层的S#arp MVC应用程序:
一个显示问题的例子:
我有一个模型票:
public class Ticket : Entity
{
public virtual string Summary { get; set; }
public virtual string Description { get; set; }
public virtual DateTime CreateOn { get; set; }
public virtual DateTime UpdatedOn { get; set; }
public virtual User CreatedBy { get; set; }
public virtual User AssignedTo { get; set; }
public virtual Priority Priority { get; set; }
public virtual Status Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它位于核心项目......
到我的View Create(Ticket)我需要一个CreateTicketViewModel:
public class CreateTicketVM
{
[Required(ErrorMessage = "Required.")]
public string Summary { get; set; }
[Display(Required(ErrorMessage = "Required.")]
public string Description { get; set; }
[Required(ErrorMessage = "Required.")]
public int AssignedToId { get; set; }
[Required(ErrorMessage = "Required.")]
public int PriorityId { get; set; }
[Required(ErrorMessage = "Required.")]
public virtual int StatusId { get; set; }
public IList<User> Users { get; set; }
public IList<Priority> Priorities { get; set; }
public IList<Status> Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它位于控制器项目......
到目前为止一切都很好......但在我的TicketController中,我需要填写所有CreateTicketVM列表(View中的下拉列表).
所以我创建了一个TicketService:
public class TicketService : ITicketService
{
readonly IRepository<User> userRepository;
readonly IRepository<Priority> priorityRepository;
readonly IRepository<Status> statusRepository;
...
public CreateTicketVM CreateNewCreateTicketVM()
{
var _ticket = new CreateTicketVM();
_ticket.Priorities = priorityRepository.GetAll();
_ticket.Status = statusRepository.GetAll();
_ticket.Users = userRepository.GetAll();
_ticket.Categories = categoryRepository.GetAll();
return _ticket;
}
}
Run Code Online (Sandbox Code Playgroud)
它位于服务项目......
问题出在Interface ITicketService上:
public interface ITicketService
{
CreateTicketVM CreateNewCreateTicketVM();
}
Run Code Online (Sandbox Code Playgroud)
它位于Core项目......但Core Project不能包含Controller项目(CreateTicketVM)......
那么,我该怎么处理呢?
谢谢
保罗
我会在您的Controllers项目中为此创建一个增强的查询对象,而不是将CreateNewCreateTicketVM方法放在您的服务上.然后,服务层仅关注行为.
看我的博文:
http://www.yellowfeather.co.uk/2011/03/enhanced-query-objects-with-sharp-architecture/
和艾恩德的评论:
http://ayende.com/Blog/archive/2011/04/01/code-review-sharparchitecture.multitenant.aspx
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |