`

CSLA.NET学习笔记(二)本地的、锚定的和移动的对象

阅读更多

  一般来说,人们会把对象认为是某个应用程序的一部分,运行在某台电脑的某个进程中。对于分布式应用程序,则需要从一个更广的角度来解释。某些对象可能只运行在单一电脑的单一进城中。其他对象则有可能被运行在其他电脑的代码调用。另外一些对象还有可能是移动对象:他们可以在电脑之间移动。

  本地的对象

  所有的.NET对象默认都是本地的。这意味着一般的.NET对象是不能从创建它们的进程之外进行访问的。如果不在代码中采取额外的处理,是不可能把对象传递到其他进程或者其他电脑中的(一个叫做封送的过程),不管是以按值还是按引用的方式。

  锚定的对象

  在很多的技术中,包括COM,对象总是按引用来传递的。这意味着当你从一台电脑或进程向另外一个电脑或者进程“传递”一个对象的时候,该对象实际上仍然留在它原来的进程中,而且传递到那个进程或电脑的仅仅是得到了连接该对象的一个指针,或者叫引用。

  其他的电脑可以通过这个引用来访问该对象。然而,因为该对象还在原来所在的电脑上,任何关于属性或者方法的调用都要在网络上传递,而且调用的结果也要通过网络返回。这种做法只有在对象的调用非常少的时候才有用;只调用一次是最理想的!MTS或者COM+对象的推荐设计方法提倡只用一个方法来做所有的事情就是因为这个原因,牺牲“良好”的面向对象设计来家少延时。

  这种类型的对象固定在,或者是锚定在它最初被创建的电脑或者进程中。一个猫定的对象永远不会移动;它通过引用被外界访问。在.NET中,猫定的对象是通过继承MarshalByRefObjet来创建的。

  

 

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->public class MyAnchoredClass : MarshalByRefObject
    {
       
    }

 

  在这之后,.NET框架会处理所有的底层细节。可以用远程调用来把这种类型的对象传递到另外一个进程或者电脑上,例如作为参数传递给一个方法,或者作为某个函数的的结果返回。

 

  移动对象

  通过远程调用、序列化和部署技术,.NET框架可以直接支持移动对象的概念。移动对象的概念依赖于对象可以被以按值的方法,在进程或者电脑之间传递的思想。这意味着对象从原来的进程或者电脑被物理的复制到其他进程或者电脑中。

  以为那台被传递的电脑得到了一个该对象的拷贝,它可以在本地使用该对象。这意味着调用这样的对象的属性或者方法是非常高效的,没有额外的性能开销,唯一的开销就是第一次的时候通过网络把这个对象复制到本地。

  注意:在网络上传递庞大的对象可能会造成性能上的问题。返回包含大量数据的DataSet会花很长的时间。这对象包含业务对象在内的移动对象也是如此。你在设计应用的时候要格外小心来避免提取非常大量的数据。

 

  可以在进程或电脑之间移动的对象就是移动对象。移动对象的例子包括DataSet和业务对象。移动对象不固定在某个地方,而是可以移动到最需要他们的地方。要想在.NET中创建一个移动对象,在你的类定义中加入[Serializable]特性就可以了。你也可以实现ISerializable接口。

  

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> [Serializable]
    
public class MyMobileClass
    {
    }

 

 

  .NET框架同样会处理这部分的细节,使得这种对象可以被容易的作为参数传递给一个方法或者作为结果从函数返回。该对象会从原电脑被复制到调用端的电脑。

  你一定要明白对象的代码并没有被自动的在网络上传递。在对象可以在电脑之间移动之前,双方的电脑必须安装包好该对象的.NET程序集。这样该对象的序列化数据才可以被.NET在网络上移动。安装所需的程序集这样的工作经常可以用ClickOnce或者其他的.NET部署技术来完成。

  什么时候使用哪种机制

  .NET框架对所有这三种机制都提供支持,可以供你选择来按照设计的需求创建自己的本地、锚定或者移动对象。

  Windows Forms和Web Forms对象都是本地的-对于创建它们的进程以外的环境是不可访问的,这种情况下,我们不允许其他应用侵入你的程序和操纵你的UI对象。

  锚定的对象非常重要,因为它们总是在某台特定的电脑上运行。如果你要编写一个访问数据库的对象,你会想让这个对象永远运行在某台拥有数据库访问权限的电脑上。因此,锚定的对象通常被用在应用服务器上。

  另一方面,如果能根据需要从应用服务器移动到客户机或者Web服务器上,许多业务对象会变得更加有用。创建移动的业务对象,你就可以在电脑间传递聪明数据,从而在所有业务数据被传递的地方重用你的业务逻辑。

  通常,锚定的对象和移动的对象会一起使用。用锚定对象来确保特定的方法是在这台服务器运行的。然后移动对象会被作为参数传递给这些方法,这会使得哪些移动对象从客户端移动到服务器。一些锚定的服务端方法会把移动对象作为结果返回,这时移动对象会从服务端移动会客户端。

  按引用传递移动对象

  这里有个术语很容易被人误解。模糊的把锚定的对象和“按引用传递”的概念联系在一起,把移动对象和“按值传递”联系在一起。从直觉来判断,这是对的。因为锚定的对象提供了一个引用,而移动对象则提供了那个实际的对象(和它的值)。

  在分布式应用中,事情变得稍微复杂了些,但是原来的定义还是正确的:一个对象可以被按引用传递,来让所有的电脑都可以获得对服务器上同一个对象的引用。而且一个对象也可以按值传递,就是复制这个对象。但是如果你把一个标记了Serializable的对象故意按引用来传递,会发生什么呢?这个对象会被按值传递,但是.NET框架会试图让这个对象看起来好像是被按引用传递。

  说得具体点, 就是这个对象按值被传递,通过网络复制了。区别在于这个对象在方法结束的时候会被返回给调用代码,而且对原对象的引用会被替换为对这个新返回的对象的引用。这么做,存在很大的危险。因为对该对象的其他引用仍然保持指向原来的对象,只有这一个特定的引用被更新。最后你可能会得到同一个对象的两个不同版本,一些引用指向旧的,一些指向这个新的。

  注意:如果按引用传递了移动对象,在每次方法调用结束后一定要更新所有引用来确保使用该对象的最新版本。

  你可以选择按值来传递移动对象,这样对象会被单向传递:从调用者到方法。或者你可以按引用传递移动对象,这样对象会被双向传递:从调用者到方法以及从方法返回调用者。如果你想得到任何方法对该对象的修改,就应该用“按引用传递”。如果你不关心或不想得到方法对该对象的修改,就应该用“按值传递”。

  按引用传递移动对象有性能上的不足,它需要通过网络把对象传递回调用段电脑,所以要比按值传递要慢。

 

  未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  
分享到:
评论

相关推荐

    CSLA.NET 4.0 Source Code

    `Source`目录则包含源代码,是学习和研究CSLA.NET工作原理的关键。 综上所述,CSLA.NET 4.0 源码是一个强大的工具,可以帮助开发者构建健壮的、符合最佳实践的业务层。通过深入理解并应用这个框架,开发者可以创建...

    CSLA.NET框架源码

    而`Source`目录则包含框架的源代码,是学习和研究CSLA.NET工作原理的关键。 总之,CSLA.NET框架源码为开发者提供了一个强大的工具,用于构建健壮的企业级.NET应用程序。通过深入研究源码,开发者不仅可以提升业务...

    CSLA.NET 4.5.601源码

    5. **移动对象**:CSLA.NET支持跨层的数据传输,使得在分布式环境中,如Web应用和WPF应用,可以无缝地共享业务对象。 6. **单元测试**:框架的设计使得业务逻辑易于测试,鼓励采用TDD(测试驱动开发)的方式编写...

    一个最完整的基于Csla.net的vb源代码

    本篇文章将深入探讨这个基于Csla.Net的VB源代码,以及如何利用这些源代码进行学习和开发。 **一、Csla.Net框架概述** 1. **框架目标**:Csla.Net的主要目标是简化业务层的开发,通过提供一系列预定义的基类和工具...

    CSLA.NET框架开发小例子集合

    通过学习和研究这些例子,开发者可以更好地掌握如何在实际项目中应用CSLA.NET框架,提升开发效率,同时保证代码的健壮性和可维护性。此外,对于初学者来说,这些实例也能帮助他们理解复杂的概念,如业务对象生命周期...

    C#企业应用开发艺术CSLA.NET框架开发实战.rar

    7. **分布式应用与移动开发**:CSLA.NET框架设计时考虑了跨平台和分布式应用的需求,支持WPF、ASP.NET、Windows Forms、移动设备等多种平台。开发者将学习如何在不同环境下部署和使用CSLA对象。 8. **最佳实践与...

    《C#企业应用开发艺术--CSLA.NET框架开发实战》源码

    本书介绍了CSLA.NET 3.6 架构背后的构思过程,描述了怎样搭建支持这个架构的框架,如何创建应用程序的业务对象,并且展示了如何使用这个框架创建基于业务对象的WPF、Web Forms 和WCF 服务应用程序。本书适用于所有C#...

    [CSLA.NET] Using CSLA 4 eBook Series

    [CSLA.NET] Using CSLA 4 eBook Series ☆ 图书概要:☆ The Using CSLA 4 ebook series will teach you how to use CSLA 4 to create powerful object-oriented business layers for your applications, as well ...

    C#企业应用开发艺术CSLA.NET框架

    在《C#企业应用开发艺术:CSLA.NET框架》中,读者将深入学习如何利用这一框架来构建高效且易于维护的企业级应用。 **1. 业务对象模型** CSLA .NET的核心是它的业务对象模型,该模型允许开发者定义强类型、可验证且...

    csla.net--4.6.5源码

    通过分析Csla.net 4.6.5源码,开发者可以了解到如何实现这些特性,学习到面向对象设计原则、模式的应用,以及如何在实际项目中有效地利用Csla来提高开发效率和代码质量。同时,源码阅读也帮助开发者更好地调试和优化...

    [CSLA .NET] CSLA .NET 框架企业应用开发艺术 (2008 版本) (英文版)

    [Apress] CSLA .NET 框架企业应用开发艺术 (2008 版本) (英文版) [Apress] Expert C# 2008 Business Objects (E-Book) ☆ 图书概要:☆ In Rockford Lhotka’s Expert C# 2008 Business Objects, you’ll learn ...

    Using CSLA 4 CSLA .NET Overview

    ### 使用CSLA 4:CSLA .NET概览 #### 一、CSLA .NET简介 **CSLA(Component-based Scalable Logical Architecture)**是一种面向对象的应用程序开发框架,主要针对.NET平台。它由Rockford Lhotka创建,并在多个...

    《#企业应用开发艺术CSLA.NET框架开发实战》配套源码及例程csla-4.5.700

    《#企业应用开发艺术CSLA.NET框架开发实战》(Expert C#2008 Business Objects)配套源码及例程csla-4.5.700。 CSLA .NET is a software development framework that helps you build a reusable, maintainable ...

    CSLA.NET 3.6

    而 "cslacs" 可能是一个包含CSLA.NET 3.6源码或库文件的文件夹,用于开发者集成到他们的项目中,或者进行学习和研究。 **使用CSLA.NET 3.6开发** 在使用CSLA.NET 3.6时,开发者可以利用其提供的基础类,如...

    CSLA.NET自动生成代码扩展模板

    Visual Studio CSLA Extension for ADO.NET Entity Framework. Visual Studio extension and T4 templates for generation of CSLA objects ...CSLA.NET框架面向实体框架的代码自动生成工具。 支持VS2012和VS2010。

    csla.net最新版本

    为了充分利用Csla.NET的最新版本,开发者需要理解其核心概念,学习如何创建和配置业务对象,以及如何利用框架提供的验证、数据访问和安全功能。同时,查阅README.txt中的信息对于了解如何正确部署和使用这些文件至关...

    CSLA.NET框架开发实战Expert C#2008 Business Objects

    8. **移动对象**:CSLA.NET支持移动对象模式,使得客户端和服务器之间的数据交换更加便捷,同时减少了网络传输的开销。 9. **并发控制**:在多用户环境中,并发控制是避免数据冲突的关键。CSLA.NET提供了内置的并发...

    CSLA .NET Framework 3.5

    1. **业务对象建模**:CSLA .NET 提供了创建业务对象的模板和基础类,这些对象可以包含数据验证、事务处理、权限管理等功能。开发者可以通过继承框架提供的基础类来快速实现业务逻辑。 2. **数据持久化**:框架支持...

    .NET软件开发框架CSLA.NET.zip

     CSLA.NET提供核心功能: 完全支持数据绑定(WPF,Silverlight,Windows Form和Web Form) 对象状态追踪(对象是否为新增、修改、标记为删除,等等。) 标准化业务和验证规则处理 在对象和属性层级的标准化授权...

    CSLA .NET Framework 3.03

    `cslacs` 文件可能是一个包含了CSLA .NET 类库的源代码文件夹,允许开发者查看和学习框架内部的工作原理。`ProjectTracker.cs` 可能是一个示例项目或代码,展示了如何在实际应用中使用CSLA .NET,它可以帮助新手快速...

Global site tag (gtag.js) - Google Analytics