`
1000copy
  • 浏览: 74385 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

从oo角度看with的使用

阅读更多

一个同事维护delphi代码的时候发现原来 的软件内有很多with。过多的with让代码难以调试。

引入with的本意在于节省重复出现的对象名。比如说,如果有这样的调用:

Function foo ()

begin

ObjectA.Prop1 = "a";

ObjectA.Prop2 ="b";

ObjectA.Run();

end

 

那么可以采用with让代码显得简洁:

With ObjectA do

Begin

  Prop1 ="a";

  Prop2 = "b";

  Run();

End;

 

在这样的情况下,使用With无可厚非。因为这样的代码确实简洁,并且并不影响代码的可读性。

问题是有些with用的太过头了。最典型的是with嵌套with,并且一个with内有多个PropertyMethod的调用,很难看出那个属性是哪个对象的。这样就使用的过度了。

 

delphi不同,在c#内根本就不支持with。和with类似的using也只是为了dispose的目的,而不是为了代码更加简洁。那么在c#内,遇到类似的代码要如何做呢?

 

其实上面的例子代码内,隐隐的躲藏着一个设计问题:就是代码的分工并不合理。代码的全部工作由函数FooObjectA来承担。在foo内大量的引用对象ObjectA,这是一种职责不清晰的迹象:说明Foo做了很多本来属于ObjectA的工作。

 

如果把这些工作分配有ObjectA来完成,那么代码应该是这样的:

Class A

  Foo()

 

Begin

  Prop1 ="a";

  Prop2 = "b";

  Run();

 end

而调用方foo这样:

Function foo()

begin

   ObjectA.Foo()

 end

自然的,既然所有的代码调用都在ClassA内部发生,那么本来天经地义应该使用with的场合,就在职责清晰的过程中,自然的变得并无必要了。

 

with并非绝对不可应用,也不是所有的代码都必须清晰职责,只要不影响阅读和使用,代码质量并不下降的情况下,with也是可以用的。

 

0
1
分享到:
评论

相关推荐

    OO programming with php5

    2. **继承**:子类可以从父类继承属性和方法,允许代码重用并减少冗余。 3. **多态**:同一接口(如方法名)可以在不同类中具有不同的实现。 #### PHP5 中的面向对象支持 PHP5 相比早期版本(如 PHP3 和 PHP4),...

    Workflow programming with ABAP OO objects

    SAP ABAP Workflow programming with ABAP OO objects

    ABAP OOALV学习文档

    1. **交互性增强**:除了基本的数据展示外,OOALV还支持多种交互式操作,提高了用户的使用体验。 2. **定制化显示**:允许用户根据需求自定义列表的显示样式,包括布局、颜色、字体等。 3. **数据处理**:支持复杂的...

    OOALV常用功能完整简例

    从描述中看到的功能点如“热键单击、双击、帮助、编辑和自定义工具条”是OOALV中常用的一些交互功能,这些功能可以极大地提高用户工作效率,使得数据展示和操作更加直观和便捷。 在给定的内容部分,我们可以看到...

    实战OO 用例 建模

    实战OO_用例建模 实战OO_用例建模 实战OO_用例建模

    OO4O简介以及其在VC++中的应用

    本文将详细介绍OO4O的特点和组成部分,并通过具体示例展示如何在VC++ 6.0环境中使用OO4O进行数据库操作,包括执行SQL语句的过程。 #### 开发Oracle数据库应用的选择 在开发基于Oracle数据库的应用时,开发者可以...

    VC++中利用OO4O接口从Oracle数据库中读写图像C++源代码程序小实例

    为了调试和错误处理,确保在每个数据库操作后检查返回状态,如`SQL_SUCCESS`, `SQL_SUCCESS_WITH_INFO`, 或 `SQL_ERROR`,并使用`SQLGetDiagRec`获取详细的错误信息。 最后,考虑到性能优化,你可以考虑使用批处理...

    实战OO的pdf自留备份

    "用例建模"是另一个核心主题,它强调从用户的角度出发定义系统功能,通过用例来描述系统应如何响应特定的用户行为。用例建模有助于识别系统的边界、核心功能以及参与者,为后续的设计和实现提供清晰的指导。 "鲁棒...

    OO programing with PHP5

    PHP5是PHP语言的一个重大版本更新,引入了全面的面向对象编程(OOP)支持,使得PHP从一个主要用于过程式编程的语言转变为一个能够支持复杂对象模型的现代Web开发工具。面向对象编程是一种编程范式,它通过封装、继承...

    SAP ABAP开发学习——第10课:OOALV(视频教程)

    10. **集成到SAP GUI**:OOALV不仅可以独立使用,还可以与SAP GUI的其他组件结合,如对话框、表单等,为用户提供统一的界面体验。 通过本课程的学习,你将掌握如何利用OOALV来创建功能强大的数据展示界面,提高SAP...

    ABAP OOALV报表开发

    ABAP OOALV报表开发,定义变量,选择屏幕定义,创建类,调用函数

    ABAP OO的八个理由

    使用OO编程,可以利用其严格的语法和语义规则,降低错误发生的概率,提升代码质量。 8. 渐进式转型:即使不完全转向OO,ABAP程序员也可以通过逐步引入对象和方法,改善传统面向过程程序的结构,提高代码的可读性...

    oracle_sdk(OO4O)

    在使用OO4O前,首先需要在VC++项目中包含必要的库和头文件。这通常涉及以下步骤: 1. 添加引用:在项目设置中,添加Oracle OLE DB Provider(如msdaora.dll)作为项目的引用。 2. 包含头文件:在源代码中包含OO4O...

    面向对象需求分析(OO RES)

    在问题域分析阶段,OO RES 使用用例模型来描述问题域中的业务流程和参与者。用例模型是一种图形化的表示方法,用于描述系统的功能需求。用例图是用例模型的图形化表示形式,用于描述系统的功能需求。 在需求定义...

    基于OO4O和VC 6.0 实现Oracle数据库操作C++源代码程序小实例

    在本实例中,我们将深入探讨如何使用Object Oriented for Oracle (OO4O)库和Microsoft Visual C++ 6.0(或Visual Studio .NET)来实现对Oracle数据库的C++编程操作。OO4O库是Oracle公司提供的一个接口,允许开发者...

    SAP OO ALV技术介绍.pdf

    SAP OO ALV技术介绍 SAP OO ALV技术是SAP系统中的一种报表控件类,通过调用cl_gui_alv_grid类的方法可以实现ALV报表的显示。OO ALV技术可以满足大多数ALV需求,但有时需要与后续的屏幕开发等集中在一个屏幕中,或者...

    OO及UML教程

    《OO及UML教程》是面向对象编程...总之,《OO及UML教程》不仅涵盖了OOP的基础理论,还提供了UML这一强大设计工具的使用指南。通过深入学习,开发者能够提升软件设计能力,为构建高质量、可维护的软件系统奠定坚实基础。

    SAP OO ALV技术介绍.pptx

    同时,OO ALV技术也可以与标准函数REUSE_ALV_GRID_DISPLAY和REUSE_ALV_GRID_DISPLAY_LVC结合使用,提供更多的报表解决方案。 在实现OO ALV技术时,需要注意以下几点: 1. 需要画一个屏幕,在屏幕上画一个容器(即...

    OO超市V1.0.7

    欢迎您使用oo超市! 开始游戏请打开bin文件夹,双击“开始游戏.exe”,即可开始游戏 注:请勿对本程序进行反向编译!否则后果自负! 怎么升级? 1、下载更新程序。 2、运行更新程序。 3、让电脑飞一会儿,更新完成了...

    oracle oo4o安装包part1

    oracle oo4o 817安装包oracle oo4o 817安装包oracle oo4o 817安装包

Global site tag (gtag.js) - Google Analytics