非常感谢phenixIII关于CSLA详细的回复!
数据绑定的确很棒, 大大减少了界面的代码量。
服务器和客户端之间的通讯,CSLA利用"数据门户"进行了封装,达到了透明化,并通过配置可以动态更改,这一点确实做得也不错。
我还是有些问题,下面我举一个例子,假设我要添加一个User, 并且记录操作日志, 以前的分布式程序(采用WebService)大约是这样的.
public class UserManagerService : WebService
{
public void AddUser(User user, int operatorId)
{
using (TransactionScope ts = new TransactionScope())
{
//做添加用户的具体事情
DbHeper.Insert(user);
//记录操作日志
Log.Add("添加用户" + user.Name, operatorId);
ts.Complete();
}
}
public User[] GetUserList()
{
//...
}
}
客户端调用是这样的:
User user = new User();
user.Id = GetId();
user.Name = txtName.Text;
//...
UserManagerService service = new UserManagerService();
service.AddUser(user, GetCurrentOperatorId());
采用CSLA,大致是这样
public class User : BusinessBase<User>
{
//工厂方法
public static User NewUser()
{
}
public static void SaveUser(User user, int operatorId)
{
user.Save();
Log.Add("添加用户" + user.Name, operatorId);
}
}
请问,事务控制的代码放在哪里? 不能放在工厂方法里,因为工厂方法SaveUser是在客户端进程中执行的. 我觉得CSLA中, 客户端和服务器之间的接口不够明确, 不象一般的分布式程序,把界面和服务器之间的接口专门作为服务的形式提供出来, 在服务层中就可以进行事务的控制,还可以做一些别的操作.