软件工程的技术问题(二)

原创 2003年01月23日 09:47:00

接口在服务的提供者和使用者之间签订了一个契约,将服务的具体实现封装起来,在保证双方各自独立的情况下,提供了功能调用的稳定性。当软件修改、升级或进行其他变动时,双方都可以各自独立的变化,但是,这个契约不能够变,这是软件稳定性的保证。

“面向接口编程,而不是面向实现编程”2。为了使软件架构更加合理,同时,也为了团队之间的合作,以及后续软件开发工作的顺利展开,软件设计的第一个工作,便是为软件的各个横向和纵向的部分制定调用接口。

特别注意的是,我们在设计基于数据库的应用系统的时候,当两个模块发生交互的需求时,应当避免使用直接在数据库中搬运数据的方法,而应当在程序中调用模块定义的接口方法,否则,对数据库的任何修改,都将带来噩梦般的问题。调用接口方法,而不是直接操纵数据库。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

              下面来看一个具体的例子:

这是一个BBS的例子。为了清楚的说明问题,让我们把问题尽量简化。现在设这个系统共有两个组成部分:用户登录信息维护和论坛发帖。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

我们可以把这个系统划分成两个模块:UserSystemArticleSystem

UserSystem将会包含以下功能:

l         新用户注册

l         修改用户信息

l         用户登录

因此,UserSystem的功能可以用代码表示如下:

public class UserSystem

{

       public void CreateNewAccount(Account acount)

       public void UpdateAccount(Account acount)

       public bool Login(Account acount)

}

              ArticleSystem的功能比较简单,就是发贴,代码可以如下:

              public class ArticleSystem

              {

                     public void CreateNewArticle(Article article)

}

因为在发送帖子的时候,需要知道当前发贴的人,会用到UserSystem中的用户信息,因此,UserSystem必须提供这个访问接口,我们在UserSystem中添加一个属性:

public static Account GetCurrentLogAccount{}

这个GetCurrentLogAccount便是UserSystemArticleSystem提供的访问接口。ArticleSystem不需要知道GetCurrentLogAccount的具体实现方法,他只需要知道,当他需要使用用户登录信息的时候,调用这个方法就可以了。以后,无论UserSystem进行如何的变化,甚至改变数据库中Account表的设计,只要GetCurrentLogAccount这个调用接口不变,都不会影响ArticleSystem。注意:千万不要在ArticleSystem中直接SelectUserSystemAccount表。

以上的接口,是一个广义上的接口的概念。至于语言层面的接口的妙用,在《设计模式》中,几乎到处都是。

上面所述,是应用系统横向的接口,下面,我们来看系统纵向接口的问题。

关于系统层次的问题,在后面会详细论述,在这里,为了说明问题,我们先做一个简要说明。

经验之谈!35岁程序员的独家面试经历

本文转载至:http://www.cocoachina.com/programmer/20151211/14653.html 创业失败后,在找工作。选择了三家(两家上市公司,一家将上市),都走到...
  • robertsong2004
  • robertsong2004
  • 2015年12月11日 15:31
  • 2110

软件测试工程师面试一般常见问题汇总

1. 编程基础;  2.数据库知识,建议准备好sql语言,能掌握高级查询使用基本可以应对了。 3.软件测试理论,这个大家都不陌生,也是必考的了,应该可以轻松应付。要注意准备下web测试和性能测试这块,...
  • hyszyl
  • hyszyl
  • 2017年03月09日 19:37
  • 4227

计算机专业面试中会问到的问题

今年是2015年,在过去几年中,电面(电话面试)是筛选程序员职位候选人的最流行的方式。它让雇佣双方很容易互相了解对方,候选人不需要去未来雇主的所在地,面试官也不用做额外的安排。这是我介绍程序员面试问题...
  • zjswxx123
  • zjswxx123
  • 2016年05月29日 14:35
  • 10377

或工程技术问题,一般按如下途径进行

  • 2009年10月19日 18:16
  • 502KB
  • 下载

为大二软件工程专业大学生解答的几个问题

【前言】   好久没有收到有深度的学生来信了。这与自己近一年来,忙于建设在线教学资源的缘故,没有时间动笔针对大学生学习中的问题,专门写指导性文章有关。没有了“引子”,IT学子指导专栏有些冷清。  ...
  • sxhelijian
  • sxhelijian
  • 2015年09月13日 16:43
  • 3875

为大二软件工程专业大学生解答问题(二)

点击看第一次…     (一)开学第二周    感谢上次贺老师的来信。我也在开学前几周做出了适当的调整,并在第二周的开始就对自己的计划进行了修整。其中的不合理之处在于偏重于理论学习,缺少学习中的...
  • sxhelijian
  • sxhelijian
  • 2015年09月30日 11:25
  • 2434

怎么解决开源软件中的黑洞问题-技术问题解决的最佳实践

一、概述 笔者将介绍怎么解决遇到的一些开源软件的问题。这些问题一般是开发人员在用开源软件遇到的,是开发人员所不熟悉的,不像是开发人员自己写的代码,有全盘的掌握。开发人员遇到的开源软件的问题,姑且叫做...
  • bxyz1203
  • bxyz1203
  • 2011年11月19日 08:18
  • 1711

大三软件工程小项目-小技术集合-tcp服务器搭建及客户端

大三软件工程小项目-小技术集合-tcp服务器搭建及客户端
  • qq78442761
  • qq78442761
  • 2017年03月07日 23:04
  • 1177

大三软件工程小项目-小技术集合-客户端界面重画

大三软件工程小项目-小技术集合-客户端界面重画
  • qq78442761
  • qq78442761
  • 2017年03月08日 21:38
  • 988

软件工程之八——面向对象技术

面向对象=对象+类+继承+通信,是现实世界存在的客观事物。按客观事物来构造程序,符合我们的思维。         面向对象技术可以保证软件的可复用性。对象指的是一个独立的、异步的、并发的实体,它能存...
  • liutengteng130
  • liutengteng130
  • 2012年11月05日 16:15
  • 2111
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件工程的技术问题(二)
举报原因:
原因补充:

(最多只允许输入30个字)