我目前在使用实体框架时使用ASP.NET MVC 4。我之前从未使用过MVC,并且已经构建了一个包含以下层的项目:
现在,我正在尝试在我的BL中编写一个查询,它使用我的GUI层中的模型。由于你不能简单地引用GUI,我真的不知道该怎么做。
以下是我正在尝试的代码:
在我的BL中:
public static List<PSNAdres> GetAdres(IZoekRepository repo)
{
List<PSNAdres> lijstTypes = (from t in repo.PSNAdres
select new PSNAdres {t.Gemeente, t.Straat, t.Postcode}).ToList();
return lijstTypes;
}
正如我所说:我是MVC的新手。这层布局是我们的MVC专家告诉我们使用的,因为这就是他的工作方式。
答案 0 :(得分:2)
我不确定你要求的是什么,但这是我的回答。显示地址列表的简单方案:
查看模型:
public class AddressListViewModel
{
public List<AddressViewModel> AddressList { get; set; }
public bool CanAdd { get; set; }
}
public class AddressViewModel
{
public string Country { get; set; }
public string City { get; set; }
public string Street { get; set; }
public bool CanEdit { get; set; }
public bool CanDelete { get; set; }
}
BL:
public static List<Address> GetAddressList()//Doesn't take repository here, repositories are injected in constructor
{
return adresRepo.PSNAdres.ToList();
}
控制器
public class AddressController : BaseController
{
public ActionResult List()
{
var addressList = blObject.GetAddressList();
var model = new AddressListViewModel();
model.AddressList = addressList.Select(a =>
new AddressViewModel
{
Country = a.Country.Name,
City = a.City,
Street = a.Street,
CanDelete = ...check user access here...,
CanEdit = ...check user access here...
});
model.CanAdd = ...check user access here...
return View(model);
}
}
答案 1 :(得分:1)
您的GUI图层只是其他图层提供的功能的消费者。
结果,你的问题源于那里的模型。如果要将项目拆分为图层,则应移动模型!
Visual Studio创建的默认项目仅在GUI层中具有模型,以用于人们不打算将GUI项目拆分为图层的情况。即初学者。它与MVC方法无关。在分割图层时,应将模型移动到“域图层”(见下文)。
所以,不用多说,将模型移出GUI层。
比你的设计更实用的方法是遵循Steve Sanderson和Adam Freeman倡导的Domain设计(Pro ASP.NET MVC 3.0框架,Apress [版本4的书尚未出版])。它与您的设计类似,但更实用。在不深入细节的情况下,您可以将模型和商务层分离为域项目。这为您提供了更实用的设计。
除非你有特殊要求,否则我认为WCF也可能过度。 MVC旨在提供您需要的面向服务的方法。
我建议阅读S Sanderson和Freeman一书。它会给你带来很多痛苦。