我已阅读this并对此感到疑惑。
我的应用包含4个图层
到目前为止,我已将VM放置在UI层中,并且它是不同类的组合。像这样的东西
public static void main(String[] args) {
try {
getToken();
Thread.sleep(10000);
} catch (Exception e) {
e.printStackTrace();
}
final Timer timer = new Timer();
Timer stopTaskTimer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
try {
/*getToken();
Thread.sleep(15000);*/
getResponse("#############");
} catch (Exception e) {
e.printStackTrace();
}
}
};
TimerTask stopTask = new TimerTask() {
@Override
public void run() {
timer.cancel();
}
};
timer.scheduleAtFixedRate(task, 0, 60000);
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse("2015-06-20 19:41:30");
//stopTaskTimer.schedule(stopTask, date);
} catch (ParseException e) {
e.printStackTrace();
}
}
我现在很困惑,我如何将这些数据从UI发送到BLL然后再发送到DAL。我已经阅读了自动播放器,但它是否处理了这种情况,如果是,那么如何? 到目前为止,我已经决定将虚拟机移动到实体层,实体层将连接到所有三个层,以便我可以发送和接收相同的数据, 还有其他好主意吗?
这是我将数据从UI传递到BLL的方式
public class CompanyVMIndex
{
public CompanyVM Company { get; set; }
public BillingAddressVM BillingAddress { get; set; }
public List<ShippingAddressVM> ShippingAddress { get; set; }
public List<CompanyContactVM> CompanyContact { get; set; }
}
然后在BLL和类似的DAL与Automapper
public ActionResult Create(CompanyVMIndex companyVM)
{
if (ModelState.IsValid)
{
//Calling BLL here
BLLFunction(companyVM)
}
return View("Index");
}
现在,我如何传递数据,因为BLL没有CompanyVMIndex的定义,这是一个VM和Web UI
答案 0 :(得分:4)
如果您想成为纯粹的#34;,那么您的BLL或任何其他图层将永远不会看到ViewModel(或者,通常,您发送给视图的任何模型)。它只会用于控制器和视图之间的通信。
当需要从BLL检索数据或将数据发送回BLL时,将使用其他类。数据将复制到ViewModel类和从ViewModel类复制。
这样,ViewModel精确地包含了控制器与视图通信所需的内容,以及视图与控制器进行通信所需的确切内容。 BLL可以是关于业务逻辑的,并且可以使用与任何ViewModel不完全对应的类。
例如,ViewModel可能包含有关客户及其公司的信息,以及客户在过去3个月内订购的产品。它还可能包含用于在视图中创建用户界面元素的其他数据:例如,运输方法列表。这些数据几乎肯定来自几个不同的BLL类和方法。该数据的形状面向视图和控制器之间的通信。 BLL类面向业务逻辑,可能还有数据库。