松耦合实现方案

本次程序实现了一个小学生算术题出题系统。主要实现了以下三个功能:

出题、判断答案对错、计算。

出题阶段,用户可以指定出题的要求,如运算中是否出现负数、括号、乘除等。

本程序由Core、UI、Console三部分组成。Core承担了核心功能,即接收用户输入,返回用户期望的结果;UI提供了一个简单的图形界面交互;Console部分实现了命令行方式的调用。

Core部分对外提供两组API:

1.统一的一个接口

  public string Process(string[] args)。直接将用户参数传入到命令行,调用Process方法即可执行。返回值全部为string类型,如果是需要返回值的功能(如判断对错),则正常情况下返回结果,错误返回特定标识符标记失败;对于无需返回结果的功能(如生成),则返回成功或失败标记。特别的,对于失败情况,会抛出经过封装的相应异常,上层可以根据异常信息判断错误,并反馈给用户。

2.划分功能的多个接口

  public void Generate(int cnt, int maxvalue, int maxsize, bool fraction, bool muldiv, bool bracket, bool positive)

  public string Check(string pathQ, string pathA)

  public string Calc(string str, int precision)

  使用这三个接口,上层调用者传入合适的参数,即可执行。三个函数根据需要有或无返回值,遇到异常情况均会抛出相应的异常供调用者分析。

对于异常:

  程序中自定义了

  public class FormulaNotLegalException : Exception

  public class ParameterErrorException : Exception

两个异常,使用了运行时的堆栈异常和除零异常,实现了所有情况的异常处理。前端只需要判断异常类型,即可知道用户是否输入合法或程序是否正确执行。

 

实现中特别注意的地方:由于对于算式输入的定义不同,有些算式存在空格,有些不存在空格。本程序在实现时做成两种情况都可以处理。算法上,程序实际处理的是不包含空格的情况,对于含有空格的,全部替换成空串后进行处理。

 

容易出现的问题:

  虽然接口的定义可以处理大多数情况的出现,但是还是存在一些问题。

  本程序计算模块对于输入算式的要求中有:所有负数必须用小括号括起来,但是衔接的用户界面并没有对这个要求作出检查,导致本应合法的算式被判定成非法。

  改进方法:使用中间层,如果用户输入不满足核心模块要求,根据实际情况给前端反馈错误或处理成可以满足要求的输入格式。

posted @ 2015-10-06 21:12  -OwO-  阅读(565)  评论(1编辑  收藏  举报