除了安全问题,因为这是另一个话题。
说,我有以下客户端实现,它利用knockout.js
observables
和computed observables
。
// Define the global 'app' object
var app = {
data: {
userProfile: ko.observable()
}
}
// Define the viewModel and subscribe to the app.data.userProfile() changes
var viewModel = {
profile: ko.computed(function(){ return app.data.userProfile(); });
}
// Establish the hub connection
var profileHub = $.connection.profileHub;
// Define the client method
profileHub.client.userProfile = function (profile) {
app.data.userProfile(profile);
};
// Start the hub
$.connection.hub.start().done(function () {
// Bind the viewModel to the view
ko.applyBindings(viewModel);
});
在此之后,如果我使用SignalR 2.0的用户ID提供程序,我应该可以从我的集线器中调用以下内容。
public class ProfileHub : Hub
{
public void UserProfile(UserProfile profile)
{
Clients.User(profile.userId).send(profile);
}
}
有效地将更新的信息绑定到用户的视图。
在此过程中,用户将更新后的个人资料提交给服务器(详细信息省略),最后我们将其存储到后端
假设我有以下C#代码将信息保存到BLL中的后端。
MyDal.Instance.UpdateProfile(profile, DalSuccessAction, DalFailureAction);
DalSuccessAction
如下:
protected void DalSuccessAction(IEntity entity){
// Handle caching through the interface
entity.ToCache();
if (entity is UserProfile) {
// Should I call the Hub directly here or is there a better way (design-wise) going about it?
}
}
答案 0 :(得分:0)
您必须将绑定应用于某些,即您的VM;淘汰赛无法猜出它是什么
// Start the hub
$.connection.hub.start().done(function () {
// Bind the viewModel to the view
ko.applyBindings(viewModel);
});
答案 1 :(得分:0)
我建议您将图层逻辑分开。这意味着MVC应该是处理客户端调用而不是BLL或DAL的应用程序。
您可以通过将UpdateProfile方法的结果返回到控制器/集线器等来实现此目的。(如果需要,可以将其转换为ViewModel对象)。