`
gdpglc
  • 浏览: 92707 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

设计层次和实现层次并不是完全统一的(2009-03-01 23:01)

阅读更多
设计层次是从大处着眼,处理软件的结构性问题。设计模型需要忽略实现的细节。

而实现时统满了细节,自然的设计模型,可能在实现时的细节是不自然的。

比如:使用strusts1.2 对公司的信息进行组合查询,公司的类型在设计时规定以整型来代表,分为三类,对应的整型值为:1 2 3。查询接口直接以组合查询条件作为参数,这里如果用户没有输入某个条件,则忽略这个条件(这种方式不能查询某字段为空的记录)。这时在设计时通常就把公司的类型作为接口的整型参数,这里还需要表达不用这个条件时的值,通常对整型用-1代表忽略对应的条件。这时就存在这样的问题,在action里得到的界面上传来的值,通常是字符串,对于字符串通常是用null和空串代表忽略的。这时对于公司类型条件,就不得不进行协议转换,增加了使用查询接口的工作量,但是增加的都是细节。如果把公司类型参数作为字符串型,则会方便action使用查询接口,可是这样必然使得接口不清晰,使实现和设计模型不附。

这里的数据类型转换是实现的细节问题,在设计接口时应不应该考虑实现的细节呢?要不要为了便于实现而把接口的公司类型参数调整为字符串型呢?

对于公司类型参数有如下三种选择:

1 int                       -1代表忽略              需要协议转换,注意:boolean无法表达忽略

2 Integer               null代表忽略            需要协议转换,表达上更一致一点。

3 String                 null代表忽略            不需要协转换,破坏了接口的语议。使软件的整体接口设计策略不统一,比如:String=>Date也存在类似的问题,而这个转换应该发生在action中,接口在整体上,设计方式应该是统一的。放便了action中对接口的使用。但如果方法会被多处使用,同样存在反向的协议转换的需要。

目前,我能想到的就这么多,我不是一个纯化主义者,因此在这三种方案之间,我难以做出先择。目前我认为,应该以明确接口为首要准则,所以应使用1或2。但是对于1的形式来说,是不能做为一个接口设计的一般要求的,因为对于boolean类型无法表示“忽略”的情况。对于2呢,也不能作为接口设计的一般要求,因为有些时候,接口上的查询参数用基本数据类型是最确切的,比如:查询员工数据时的一个条件为“只返回受过奖励的员工”,那么这个条件就只有两种情况,应该使用boolean最好。

因此这里总结一下查询参数的设计方法如下:
我想第1和第2都是可行的,2用null来表达忽略应该好一些。对于3,要注意,String是界中数据的基本形式,不要因为从界面来的数据是String类型的就把接口的参数也定义成String类型的,模型的接口应该和接口的语义一致。

对于一些脚本语言其实不存在这样的问题,默认就是第三种方案,比如:php。
分享到:
评论

相关推荐

    ThinkPHP3.2.3完全开发手册.docx

    ### ThinkPHP3.2.3完全开发手册知识点总结 #### 序言 - **手册目的与定位**:作为ThinkPHP3.2.3版本的官方文档,本手册旨在为开发者提供全面、系统的开发指南,帮助他们更好地理解和使用该框架。 #### 基础 - **...

    软件工程习题200题

    - **一致性**:遵循统一的设计风格。 - **简洁性**:代码简单明了。 - **可读性**:易于理解和维护。 #### 二十二、层次方框图与软件结构图比较 - **相同点**: - 都用于描述软件结构。 - **不同点**: - 层次方框...

    数据库复习提纲

    - 优点:结构简单、易于理解和实现。(P32) - **数据库系统的三级模式**: - 外模式:用户视图。 - 模式:全局逻辑视图。 - 内模式:物理视图。(P33) - **两级映射**: - 模式/内模式映射:保证数据物理...

    CoreJavaNoteBook

    - Java集合框架提供了统一的接口和实现。 - 包括List、Set、Map等常用集合类。 - **反射(Reflection)**: - 反射允许在运行时获取类的信息,并创建和操作对象。 #### 8. 异常 - **异常的基本概念**: - 异常...

    《EDA技术与VHDL》(第2版)课件--(高清PDF799页)

    - **统一设计流程**: 将所有设计环节纳入统一的设计方案中。 - **完整测试**: 设计完成后仍可通过计算机进行完整的硬件系统测试。 #### 五、面向FPGA的开发流程 **1.5 面向FPGA的开发流程** - **设计输入**: - ...

    GoF23种设计模式解析.pdf

    本书中详细介绍了23种设计模式,并提供了这些模式的概念、应用场景、优缺点以及实现细节。 设计模式的学习不仅仅是掌握一套技巧,更重要的是理解和掌握面向对象设计的原则和方法。通过深入研究GoF设计模式,可以更...

    计算机系统结构简答题总结

    - **增加存储时间和软件设计费用**:软件实现可能会占用更多的内存空间,并且设计复杂的软件系统需要付出较高的设计成本。 #### 4. 目前通用机来说,计算机系统结构的属性主要包括哪些 - 在当前通用计算机中,...

    2021-2022计算机二级等级考试试题及答案No.10273.docx

    - 删除带有病毒的文件并不一定能完全清除计算机上的病毒。 2. **知识点详解**: - **病毒清除**:仅删除带毒文件可能不足以清除所有病毒。 - 需要使用专门的反病毒软件进行全面扫描和清除。 ### Java中的整型...

    数据库系统概论课后习题答案

    - 多对多关系与两个实体间的关系并不完全等价,因为可能存在中间实体。 10. 示例E-R图: - 学校中的E-R图应包含系、班级、教研室、教员、学生和课程等实体,以及它们之间的联系。 11. 工厂的E-R图: - 包括产品...

    《数据库原理与应用》(孟凡荣-闫秋艳)课后习题答案.docx

    虽然数据库设计中会尽量减少数据冗余,但并不是完全避免。 8. **数据操作语言是一个高级语言**:不完全正确。数据操作语言(DML)是一种专门用于数据操作的语言,并不一定属于高级语言。 9. **非过程化语言比过程化...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    +2009-12-01 v2.1.7 -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region控件中删除SplitColor属性,增加...

    系统架构设计师思维导图1

    - **特点:** 存储程序原理,程序和数据统一存储在内存中。 - **组成部分:** 输入设备、输出设备、运算器、控制器、存储器。 **计算机硬件图及运行逻辑:** - **组成:** 包括CPU、内存、输入输出设备等。 - **...

    数据库系统原理及应用教程重点

    ### 数据库系统原理及应用教程重点知识点解析 ... - 通过实际案例学习如何应用前面章节介绍的设计原则和技术。 - 分析案例中的需求,设计合理的数据库结构。 - 应用关系规范化理论,优化数据库设计。

    专属云平台建设技术方案.docx

    ### 专属云平台建设技术方案知识点...通过对硬件基础设施的合理规划与利用、技术架构的精心设计以及实施过程的有效管理,企业能够构建起一个稳定、高效且可扩展的专属云平台,从而更好地支持其业务发展和战略目标实现。

    2021-2022计算机二级等级考试试题及答案No.1044.docx

    运算速度快和快速传输信息:不全面,运算速度快并不是网络的主要优点。 - D. 存储容量大和高精度:不相关,这些特性并非网络的主要优势。 - **正确答案**:A. 资源共享和快速传输信息 ### 4. 程序执行效率的因素...

    设计好看的用户界面--体会与经验

    例如,程序员在设计窗口、摆放控件、选择图标、字体和颜色等方面缺乏统一标准,导致整体观感不佳。 - **初步尝试**:为了解决这一问题,小W首先想到的是聘请专业平面设计师来进行界面设计。然而,由于设计师与程序员...

    学前教育专业技术知识简答题.doc

    学前教育是儿童早期成长的重要环节,涉及众多专业知识和技术。在这一领域,幼儿园课程的设计与实施扮演着核心角色。以下是根据提供的内容解析的一些关键知识点: 1. **幼儿园课程特点**: - **游戏为主**:游戏是...

    局域网设计方案材料.doc

    宁夏银行新办公大楼的局域网设计方案主要围绕七个核心原则:高可靠性、高安全性、统一性、标准开放性、灵活性和可扩展性、整体网络可管理性和网络技术的先进性和成熟性。这两种方案分别是物理隔离的双网络系统和逻辑...

Global site tag (gtag.js) - Google Analytics