软件工程附加篇章:进阶四则运算和Core对接
0x01 :计算模块(Core)和前端对接
首先特别结对编程刘乾组(SivilTaram)提供的计算模块(Core),http://www.cnblogs.com/SivilTaram/p/4859934.html

在Core模块的说明文档中,我们可以清晰发现在计算模块Core主要实现了表达式计算、四则运算表达式生成、题目文件和答案文件的审核的功能;
但在设计思路上:
在整体的设计思路上,SivilTaram组的Core模块同样将写入和读取文件的逻辑封装在计算模块中;但在自己的前后端的设计中,完全将计算模块设计为单纯的计算功能
在参数设置的方式上,SivilTaram组的Core将全部的setting更改为XML文件的读写,在自己在Core上将setting全部嵌入到计算模块中,但是由于XML文件的读写和setting的实现方法并没有引起较大的冲突,仅在“设置”部分调用了此函数,因此,我们这里完全能够通过XML的读写函数来封装setting函数;
在文件的读写中,SivilTaram组的Core直接将试题的生成和答案的生成直接写入文件,而自己在设计中将文件的读写全部置于前端,计算模块仅生成能够读写入文件的内容(string或string[]类型等),这里我们不妨在此将CoreInterface接口的内容再次列在下面
interface CoreInterface
{
void setting(int MinRange, int MaxRange,
int minOp, int maxOp, long number,
bool isFactor, bool isDecimal, bool isMin,
bool isBracket, bool isMul);
bool setJudge();
string CreateSingleExpression();
string[] CreateExpression();
string[] CorrectionJudge(string exercise, string answer);
string Calc(string formula);
}
因此,考虑到整体的设计思路我们不妨可以通过读写临时文件ConfigurationTextForWinform[1-3].txt的方式,将SivilTaram组的Core中写入文件的部分重新读写,并通过中间层实现SivilTaram组的Core模块由中间层ConfigureCore : CoreInterface解析为基本的自己的Core的方法,从而使得前端几乎不需要任何修改,即可实现前后端的耦合,总体用于中间层的代码量不超过100行,因此得益于前端较高的独立性,和SivilTaram组功能封装明确的Core模块,最终整体的耦合并未花费较长时间,但在耦合的过程中也存在了一些问题,不妨将它简单罗列与0x02中,将此分享
0x02 :计算模块(Core)和前端对接中的问题
0x0204 :前端模块和计算模块
首先开启对自己计算模块和前端模块的吐槽部分,在耦合的过程中,在基本功能的实现中,即表达式计算、四则运算表达式的生成、题目和答案文件的检测,由于在封装的过程中完全调用了Core实现的接口,此过程并没有出现其他问题,整体耦合相对较优;但在额外添加功能的过程中,由于涉及已知答案和目标答案的比较,这里由于用户的输入可能存在浮点数、真假分数、带分数等多种不同形式的表达,因此这里采用设置精度e的方式,通过全部解析为decimal类型的数据,进行“约等于”的比较;这里由于扩展功能时为想清楚这其中必要的联系,不得以采用基础类Factor和ParseNumber方法类保证此部分功能的实现,导致前端中不仅存在了Core的计算模块,还包含Factor的基础模块,使得前后端的耦合过程中,若不取消试题挑战功能,必须保留Factor基础类。但最终,通过Core.Calc的方法直接获取结果的字符串形式,最终在前端封装private decimal(string result)函数和private bool near(string resultA, resultB, precision)函数来实现这一过程,避免对底层类的调用。
0x0208 :.NET框架的安装说明
事实证明在处理意外问题上总是拖延了过长的时间,由于SivilTaram所提供的dll文件是基于4.5.2 .NET Framework框架生成,因此在耦合过程中会存在警告信息,“ 未能解析主引用“Core, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL”,因为它是针对“.NETFramework,Version=v4.5.2”框架生成的。该框架版本高于当前目标框架“.NETFramework,Version=v4.5“”,因此,我们这里需要在VS 2013中配置.NET Framework 4.5.2框架,这里中间经历了一定的时间,具体的方法说明于如下链接:
http://stackoverflow.com/questions/31189154/how-do-i-get-visual-studio-2013-to-allow-me-to-target-net-framework-4-5-2
这里额外说明,一定要下载Developer Pack Of the .NET Framework,否则在配置过程中VS2013的目标框架中将始终不存在这一选项
0x0208 :.NET框架的安装说明
这里展示部分的代码框架来说明中间层的设计思路
public class ConfigureCore : CoreInterface
{
private Core.Configure con;
private static long tick = DateTime.Now.Ticks;
public static Random rand = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
public ConfigureCore(Random rand)
{
ConfigureCore.InitialXmlFile();
rand = ConfigureCore.rand;
}
public void setting(int MinRange, int MaxRange,
int minOp, int maxOp, long number,
bool isFactor, bool isDecimal, bool isMin,
bool isBracket, bool isMul){}
public bool setJudge(){}
public string CreateSingleExpression(){}
public string[] CreateExpression(){}
public string[] CorrectionJudge(string exercise, string answer){}
public string Calc(string formula){}
//XML Part For Inital Of UI
public static void InitialXmlFile(){}
private static void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value){}
public static string ChangeXml(string name, string NewValue){}
public static string ReadXml(string name){}
}
0x03 :计算模块(Core)和前端对接中的反思
最终,在几乎未改动前端模块的前提下,通过中间层的搭建完成了SivilTaram组的Core计算模块和自己UI前端的耦合,总体而言,此次中间层的代码量并非很大,但在此附加题的过程中也主要存在着一些感想:
接口设计思路:在从需求分析到设计部分,在起初自己忽略了前后端的功能划分,但在第二天的接口设计的过程想到此问题才开始重构;因此,此次接口设计思路是耦合过程中的显著问题,信息封装过程是否封装了大量必要信息导致前后端代码量出现不匹配的状况,依赖倒置原则中是否在前端中使用了过多的底层类,导致对底层类的依赖性更强,而违背这一原则等等
功能实现的区别:因此四则运算的生成和计算能够生成很多功能:从最简单的单词挑战、评分等功能的实现,因此个人认为从功能的角度,最好能将Core接口封装为单纯的计算模块,由中间层或前端完成文件本身的读写操作;因此,此次由于计算模块的接口未规定,也导致不同层次的功能封装在不同模块,耦合的时候会需要大量的中间层代码去兼容,而不是通过接口去完成耦合
结对编程的团队拼接:事实证明,愈加提前的沟通效率越是能降低后期修改、耦合的时间,如果能在结对编程中提前设计一套统一的接口,那么在前后端的直接耦合上,可能会仅需简单的参数设置完成之间的修改吧
0x04 :尾序:写于团队编程的前夕
并非所有的记忆都被冠以再也不见的标语,
就仿佛青春算得好相聚算得好嬉戏却依旧算不好分别
既然说了再见,也一定会再次相见
散落天涯,不过是为了更好的相见
再见啦,这个骄阳似我回忆似沙春风十里不抵嫣然笑靥的夏天
一切安好~
——《夏洛特烦恼》第二章
软件工程附加篇章:进阶四则运算和Core对接的更多相关文章
- 软件工程驻足篇章:第十七周和BugPhobia团队漫长的道别
0x01 :序言 I am a slow walker, but I never walk backwards. 成长于被爱,学着爱人 成长的故事 也是年少的星期六结束的故事 就仿佛我和BugPhob ...
- 结对作业——随机生成四则运算(Core 第7组)
结对作业 ——随机生成四则运算(core第7组) 吕佳玲 PB16060145 涂涵越 PB16060282 GITHUB地址 https://github.com/hytu99/homework_2 ...
- Core 第三组 结对作业——四则运算 Part1. Core代码编写
结对作业——四则运算 Part1. Core代码编写 PB15061303 刘梓轩PB16061489 艾寅中 GITHUB 地址 戳这里 目录 (因为内容较多,分为了三个部分,但作业系统中只能提交一 ...
- 软件工程启程篇章:结对编程和进阶四则运算(197 & 199)
0x01 :序言:无关的事 I wrote a sign called "Dead End" in front of myself, but love crossed it wit ...
- 软件工程启程篇章:C#和四则运算生成与运算
0x01 :序言 I leave uncultivated today, was precisely yestoday perishes tomorrow which the person of th ...
- 佛系结对编程---四则运算(Core 第四组)
----by core 第四组 ( 邹卫其 范力 ) 一. 项目介绍 1. 能自动生成小学四则运算题目并给出答案,生成题目时可以选择下列参数: 1)生成题目数量 2)每道题目中运算数数量 ...
- 四、附加到进程调试(.NET Core)
1.安装.net core windows server托管工具包: 1.下载https://dotnet.microsoft.com/download/thank-you/dotnet-runtim ...
- Asp.Net Core对接钉钉群机器人
钉钉作为企业办公越来越常用的软件,对于企业内部自研系统提供接口支持,以此来打通多平台下的数据,本次先使用最简单的钉钉群机器人完成多种形式的消息推送,参考钉钉开发文档中自定义机器人环节,此次尝试所花的时 ...
- 开发进阶:Dotnet Core多路径异步终止
今天用一个简单例子说说异步的多路径终止.我尽可能写得容易理解吧,但今天的内容需要有一定的编程能力. 今天这个话题,来自于最近对gRPC的一些技术研究. 话题本身跟gRPC没有太大关系.应用中,我用 ...
随机推荐
- [转]extern "C"的作用
extern "C"的主要作用就是为了能够正确实现C++代码调用其它C语言代码. 加上extern “C”后,会指示编译器将这部分代码按C语言进行编译,而不是C++的.这是因为C+ ...
- 【PAT】B1075 链表元素分类(25 分)
这道题算有点难,心目中理想的难度. 不能前怕狼后怕虎,一会担心超时,一会又担心内存过大,直接撸 将三部分分别保存到vector 有意思的在于输出 分别输出第一个的add和num 中间输出nextadd ...
- 8.1Python面向对象编程(一)
目录 目录 前言 (一)基本概念 ==1.面向过程与面向对象== ==2.类与对象== (二)类属性的相关操作 ==1.定义一个经典类== ==2.对象属性的操作== ==3.类属性的操作== ==4 ...
- UITableView详解
一.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRectMake(, , , )]; [DataTable setD ...
- 实现strStr()的golang实现
实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...
- 解决Could not load file or assembly CefSharp.Core.dll的问题
这个问题的中文提示是: 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项.找不到指定的模块 具体原因是因为CefSharp运行时需要Visual C++ Redistrib ...
- SQL2008 一直error40 无法连接到localhost
1. Problem 2. Reason 可能是之前卸载SQL Server时没卸载干净 后来又重新安装时导致默认实例名不能用 就随手写了个SQLMOLORY实例名 但其实系统内这时是有两个SQL实例 ...
- DevExpress gridcontrol gridView主从表折叠/展开显示
在使用报表的时候,有很多需要主从表一起显示,从表不需要另外弹窗显示明细,反而直接显示在主表下方.如图所示: 第一次做这个功能,主从表显示,从表列隐藏,从表单元格点击事件这三个功能点花费了很多时间,在网 ...
- BZOJ 1444:[JSOI2009]有趣的游戏
BZOJ 1444:[JSOI2009]有趣的游戏 题目链接 首先我们建出Trie图,然后高斯消元. 我们设\(f_i\)表示经过第\(i\)个点的期望次数: \[ f_x=\sum i\cdot p ...
- Ubuntu18.04安装Tensorflow+cuda+cuDNN
本文写的比较简单,期间遇到的一些小麻烦,自己不认为成为阻碍,所以没有详细写. 如有疑问可以联系QQ:2922530320 Pycharm Pycharm使用Anaconda Pycharm 在新建项目 ...