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对接的更多相关文章

  1. 软件工程驻足篇章:第十七周和BugPhobia团队漫长的道别

    0x01 :序言 I am a slow walker, but I never walk backwards. 成长于被爱,学着爱人 成长的故事 也是年少的星期六结束的故事 就仿佛我和BugPhob ...

  2. 结对作业——随机生成四则运算(Core 第7组)

    结对作业 ——随机生成四则运算(core第7组) 吕佳玲 PB16060145 涂涵越 PB16060282 GITHUB地址 https://github.com/hytu99/homework_2 ...

  3. Core 第三组 结对作业——四则运算 Part1. Core代码编写

    结对作业——四则运算 Part1. Core代码编写 PB15061303 刘梓轩PB16061489 艾寅中 GITHUB 地址 戳这里 目录 (因为内容较多,分为了三个部分,但作业系统中只能提交一 ...

  4. 软件工程启程篇章:结对编程和进阶四则运算(197 & 199)

    0x01 :序言:无关的事 I wrote a sign called "Dead End" in front of myself, but love crossed it wit ...

  5. 软件工程启程篇章:C#和四则运算生成与运算

    0x01 :序言 I leave uncultivated today, was precisely yestoday perishes tomorrow which the person of th ...

  6. 佛系结对编程---四则运算(Core 第四组)

    ----by core 第四组 ( 邹卫其 范力 ) 一. 项目介绍 1. 能自动生成小学四则运算题目并给出答案,生成题目时可以选择下列参数:   1)生成题目数量   2)每道题目中运算数数量   ...

  7. 四、附加到进程调试(.NET Core)

    1.安装.net core windows server托管工具包: 1.下载https://dotnet.microsoft.com/download/thank-you/dotnet-runtim ...

  8. Asp.Net Core对接钉钉群机器人

    钉钉作为企业办公越来越常用的软件,对于企业内部自研系统提供接口支持,以此来打通多平台下的数据,本次先使用最简单的钉钉群机器人完成多种形式的消息推送,参考钉钉开发文档中自定义机器人环节,此次尝试所花的时 ...

  9. 开发进阶:Dotnet Core多路径异步终止

    今天用一个简单例子说说异步的多路径终止.我尽可能写得容易理解吧,但今天的内容需要有一定的编程能力.   今天这个话题,来自于最近对gRPC的一些技术研究. 话题本身跟gRPC没有太大关系.应用中,我用 ...

随机推荐

  1. January 19th, 2018 Week 3rd Friday

    As iron sharpens iron, so a friend sharpens a friend. 铁磨铁,可以磨砺出刀刃,朋友相交,亦应如此. When making friends wit ...

  2. Beta冲刺(4/5)(麻瓜制造者)

    今日已完成 邓弘立:完成了商品管理(下架)和搜索功能 符天愉:完成了后台管理员界面的登录和其他视图的载入 江郑:昨天来决定跨域执行请求,后台参考一些意见以后,操作起来没有那么容易实现,和队友交流以后本 ...

  3. ConcurrentLinkedQueue源码解读

    1.简介 ConcurrentLinkedQueue是JUC中的基于链表的无锁队列实现.本文将解读其源码实现. 2. 论文 ConcurrentLinkedQueue的实现是以Maged M. Mic ...

  4. Django之Template

    模板层(template) 概念:  模板与html的区别:  模板=html+模板语法 模板语法: 1 变量:       {{}}    深度查询: 通过句点符.    列表,字典    clas ...

  5. 【转】玩玩你的Windows防火墙——穿透与防御

    前言:在防火墙专区,我经常看见朋友们讨论,“某某防火墙的性能如何”,亦或是,“某某防火墙的防御能力如何”.实际上,一个防火墙所履行的基本职责便是“网络访问控制”,即放行我们允许的通信,阻止我们未允许的 ...

  6. docker swarm英文文档学习-12-在集群模式中的Raft共识

    Raft consensus in swarm mode 在集群模式中的Raft共识 当Docker引擎在集群模式下运行时,manager节点实现Raft 共识算法来管理全局集群状态.Docker s ...

  7. infura的使用

    infura 官网: https://infura.io/本地安装geth的方法需要花比较多的时间和空间来同步区块,利用infura可以简单很多,infura提供公开以太坊和测试节点,可以利用infu ...

  8. day14 Python函数

    函数def,严格来讲有个return返回值 过程就是没有return返回值的函数 #过程 def test01(): msg = 'liuhaoran' print(msg) #函数 def test ...

  9. 玩转 ”hello word“,Python程序员大多数都没有实现过

    很多人学习Python很长时间,对于'hello word' 的认知,很多已经从事Python多年的程序员的认知也就只有: print(hello wrod) 但是有没有让hello word 变得不 ...

  10. 盖茨基金会:如何使用Python拯救生命

    每年全球都要花费数十亿美元来预防疾病,减少死亡,资助预防保健及治疗的各种研发项目,以及其他的健康方案.但资金毕竟是有限的,所以一些组织,比如全球卫生资金的主要捐助者比尔&梅林达·盖茨基金会(B ...