代码改变世界

Business Object 学习笔记2

2009-12-23 22:32  飞逝心情  阅读(502)  评论(0编辑  收藏  举报

在面向对像开发中,要想在业务组件中采用验证,一个好的方法是在业务类型中采用验证,拒绝不符合业务要求的数据,也就是说,最好在实体类中采用公开属性隐藏字段的方法封对实体类的访问。下面是一个例子。

public class Project
    {
        private Guid _id = Guid.NewGuid();
        public Guid Id
        {
            get { return _id; }
        }
        private string _name = string.Empty;
        public string Name
        {
            get { return _name; }
            set
            {
                if (value == null) value = string.Empty;
                if (value.Length > 50)
                    throw new Exception("Name too long");
                _name = value;
            }
        }
    }

很多复杂的业务系统中,业务逻辑会分离开来,分别位于“客户端”和“应用程序服务器”上。

如何在不同的进程间传递对象

在正常情况下,.net对象不可能与其它进程或者其它机器的类传递信息,默认是“本地的(Local)”。

如果一个对象通过“引用”的形式访问另一个机器上的对象,那么,他们之间虽然表像上是“互相传递值”,但实际上,他们内部采用的是“引用的方式,两个类各自运行,并没有发生类的传递,传递的是指针。”这种做法称为“Anchored Objects”。在这种情况下,远程调用的方法应该尽可能的完成“多个任务”,以减少传输中的“性能消耗”.在.net 中,可以通过使用WCF技术或者.net Remoting技术实现。

Mobile Objects:通过传值“object 本身”到另一个进程或者机器中,实现交互。如果一个类是可以“传值”的,显然,它必须可以是序列化的。

需要注意的是无论传值还是“引用传递”,都需要在目标机器上安装相应的程序集。一般来说,Anchored Objects多用在应用服务器上,而Mobile Objects多用于业务逻辑的实体类。传值易引发“仅最后一个修改有效”,传引用则会造成“同一时间被多个修改”。性能上,传引用低于传值。

逻辑分层与.net 技术的对应图

image