业务系统里面常见的方法接口设计

在程序中用得最多的还是方法,在处理业务的系统中如何设计方法是一个很重要的问题。很多系统由于缺乏统一的约定而导致维护困难。本文主要介绍的是偶在平常的开发中总结出来的一些方法设计的思路。希望大家不嫌弃。

 

1.         简单的方法

 void DoSth(args)
    {

           // do some thing here

           // throw some error here if the method was not run correctly 
    }

       方法没有返回值,也没有特别的错误标示,一般用在一些不易出错的 所以如果方法有可能执行不成功的时候,则可以在方法里面抛出异常,在调用的地方用catch捕捉。或者根本不捕捉方法里面可能产生的异常,从而让异常跟着堆栈往上层爬,一直到合适的位置才进行捕捉。这种情况通常用于对方法中的异常没有十足的把握处理、不想在本方法中处理异常、有意向上层屏蔽底层异常的情况。很多设计这主张“底层抛出异常,上层处理异常”的设计原则,在这种设计原则的指导下,用的最多的方法设计就是这种。

 

以下的几种方法都要求尽量捕捉方法中可能存在的Exception。

 

2.         返回字符串/数字

string/int DoSth(args)
{

       // do some thing here

       // return some message if the method was not run correctly

}

执行某个方法,然后把结果用字符串/数字的形式返回,比如返回“OK”/1表示执行成功,返回“不能预料的错误”/-1等信息表示没有正确执行

 

3.         返回布尔值

bool DoSth(args)
{

       // do some thing here

       // return true or false to tell the caller if the method was run correctly

}

执行某个方法,然后把结果用bool值的形式返回,true表示执行成功,false表示执行失败。一般用在只关心结果,不在乎为什么是那个结果或者导致结果的原因已经很明确的时候。

 

4.         返回布尔值和错误信息

bool DoSth(args, out string message)
{

       // do some thing here

// return true or false to tell the caller if the method was run correctly

       // set the error message to “message” if exception or error occurred.

}

       执行某个方法,然后把结果用bool值的形式返回,如果出错,将错误信息设置到一个out 的参数中。这种方法适合于那些比较复杂,可能出现多种意外的方法,执行中出现的意外可以通过message来查看,而结果可以通过返回值来查看。调用方可以只在乎结果,也可以在乎原因。

 

5.         两个方法合作(或者一个方法和一个属性合作的方法)

string errorMessage;

bool DoSth1(args)
{

       // do some thing here

       // return true or false to tell the caller if the method was run correctly

       // set the error message to “errorMessage” if exception or error occurred.

 

}

bool DoSth2(args)

{

       // do some thing here

// return true or false to tell the caller if the method was run correctly

       // set the error message to “errorMessage” if exception or error occurred.

}

 

string GetLastError()
{
       return errorMessage;
}

 

方法本身只返回结果,但是当结果为false的时候,可以通过GetLastError来获取最后一个错误信息。这种设计适合于类里面存在很多可能出错的方法的情况,比如上面的DoSth1,DoSth2,这样就不必要为每个方法添加out参数,在实际中用得比较多。另外,当程序中存在循环,而又不想因为循环的某一次发生错误而终止程序的时候,也可以采取这种办法。


事实上,每一种方法都有其用武之地, 问题的关键在于我们使用一种约定,最好的办法就是在同一个系统里面尽量只使用其中的一种,以避免维护和后续开发上的麻烦。

转载于:https://www.cnblogs.com/QuitGame/archive/2005/06/30/183732.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux python 信号,Python模块之信号(signal)

在了解了Linux的信号基础之 后,Python标准库中的signal包就很容易学习和理解。signal包负责在Python程序内部处理信号,典型的操作包括预设信号处理函数,暂 停并等待信号,以及定时发出SIGALRM等。要注意,signal包主要是…

你为什么喜欢VIM?

昨天看到的一个讨论,说vim有没有那么必要?所以写了这篇文章,在评论区说出你的观点,当然说出你的观点的时候,你拿不到一百万,也得不到小红花,但也是因为你的评论,我可能会开心一整天。…

新世纪篇章

团队blog开通http://www.cnblogs.com/team/solartimes.html还没弄明白怎么搞。。。一阵研究solartimes成员,快来注册。。。 转载于:https://www.cnblogs.com/konimeter/archive/2005/09/19/239671.html

RTT大牛告诉你,混合微内核是什么?

RT-Thread之前写过好几篇文章介绍微内核,然而不少开发者依然不清楚到底微内核操作系统是什么。为此,我们特别整理了5期快问快答,来为大家答疑解惑!RT-Thread Smart称作是混合微内核操作系统,为什么叫混合微内核操作系统…

linux操作指令及根目录介绍

1. 查看当做操作目录位置 > pwd 2. 查看(当前)目录里边的文件内容 > ls //list > ls -l 或ll //显示文件的详细信息 > ls -al //all显示文件的详细信息(包括隐藏文件) > ls -a //显示目录全部文件名字(包括隐藏文件) > ls [-al] 目录 //查看指定目录的文件信…

计算机linux运维日记,计算机的运维系统情况

其实,对于计算机的主要部件来说,计算机是有硬件和软件组成的,并且能够通过硬件和软件的协同工作完成了的,而对于一些计算机的硬件,则是由一些不同的部件进行完成的,那么其中主要的补间就是内存,…

Linux ALSA 图解

最近在解决一个音频的问题,所以正好借这个机会来把音频的东西重新梳理一下,总结是一个很好的习惯,能方便自以后遇到问题快速排查问题。平台「MT8167」内核版本「kernel 4.4」音频读数据函数流程tinyalsa调用读取函数IOCTL调用流程读取数据到应…

OpenGL学习笔记-坐标系统

转换关系: 局部坐标系 (模型矩阵)》 世界坐标系(观察矩阵)》观察坐标(投影矩阵)》裁剪坐标 Vclip Mprojection * Mview * Mmodel * Vlocal 裁剪空间(透视划分)》标准化设…

将一段复杂文本变成字符串的赋值语句

因为需要在C#的代码中,写入一大段的js代码和网页代码,试验已经没有问题了。实现时却碰到一个小问题,就是大段的js和html代码,应该以什么方式存在。最省事的方式,其实就是存在一个单独的文件中,每次读入即可…

ARM 原子操作里的两个汇编指令

今天一个读者朋友给我留言,问了这个问题,ARM原子操作的汇编代码,还给我截图了两个不同的解释,让我说哪个是正确的。原子操作的起因是为了内核同步,保证数据在正确性,之前已经吹过一波,可以看这几…

解决Ubuntu下pycharm无法输入中文的问题

sudo nautilus在这个界面中通过“计算机”进入pycharm.sh所在文件夹。一般在安装包的bin文件夹中。3、在文件pycharm.sh中添加红色字样内容(根据自己实际pycharm.sh文件内容适当添加)[maokxlocalhost bin]$ vi pycharm.sh# ----------------------------…

奥鹏20春在线作业c语言,电子科20春《C语言(专科)》在线作业3答案

试卷总分:100 得分:100一、单选题 (共 20 道试题,共 100 分)1.已知intb;则对指针变量p正确的说明和初始化是:()A.intpb;B.intp&b;C.int*pb;D.int*p&b;答案:2.对于int*p;inta[];pa;的合法运算()A.若p中的地址为100则p;运算后,则其值为100B.p;相当…

秒,在解答这个C语言题目上,我们都败了

看这篇文章之前,我觉得可以先看看下面这篇文章 看printk引发的一点思考不管我们用的printk还是printf,它们的核心都是可变参数的函数,所以可以拼接很多参数传递给函数实体,然后函数实体里面可以通过某种方式解析这些参数。看看这个…

为C++程序添加文件保存加载功能

一、引子为什么要浪费时间去设计一个算法来实现数据的文件存储还要费劲地调试代码呢?Boost库可以为你做这些事情。借助于串行化模板,你可以容易地把数据存储到你自己定制格式的文件中。本文将教给你如何轻松地存储数据并回读数据。二、概述当你开发一个软…

[Uva10641]Barisal Stadium(区间dp)

题意:按照顺时针给出操场的周边点,然后给出周围可以建设照明灯的位置,以及在该位置建设照明灯的代价,照明灯照射的范围与操场的边界相切,现在要求一个最小的花费,要求操场的所有边都被照射到。 解题关键:预…

常用c语言代码大全,C语言的一些常用代码

C语言经常需要发明各种轮子,为方便以后能够把精力放在应用逻辑上而不在发明轮子上,把一些常用的代码片段列于此。首先是字符串处理方面的,strcpy 函数容易越界,习惯使用 strncpy 函数,但此函数只管复制最多 n 个字符&a…

Linux kernel 同步机制(下篇)

之前的文章Linux kernel同步机制在上一部分,我们讨论了最基本常见的几类同步机制,这一部分我们将讨论相对复杂的几种同步机制,尤其是读写信号量和RCU,在操作系统内核中有相当广泛的应用。读写信号量(rw_semaphore&…

白话设计模式——Abstract Factory

Abstract Factory,把英文直接翻译过来的话就是“抽象工厂”,既然是工厂,那就肯定是生产产品的地方。不过,它不是生产同一类的产品,而是生产同一系列的产品。举个例子,广州本田现在生产3种汽车,O…

c语言程序设计工资纳税系统流程图,c语言程序设计,纳税工资系统.doc

c语言程序设计,纳税工资系统c语言程序设计,纳税工资系统第一章 课程设计目的和要求1.1 课程设计的目的C语言一直是程序设计语言的主流之一数据类型丰富、齐全。C供了整数、实数、字符、字符串等基本数据类型,还提供数组、指针、结构体等构造数据类型运算符丰富、齐全…