怎样合理的定义自己模块的对外接口。

问题描述

最近老大让我写一代码编辑器模块,让我自己定义这个模块的对外接口以及把模块再划分成更小的模块.以前基本是别人定义好了,我只要实现就可以,但现在要我来做,真的是片空白。在此想请各问的给出一些指导。老大还说什么低耦合,强内聚。

解决方案

解决方案二:
没办法,先去学习一下设计模式吧,这东西不是讲两句你就能干的
解决方案三:
引用1楼bdmh的回复:

没办法,先去学习一下设计模式吧,这东西不是讲两句你就能干的

设计模式是看了,但是不理解了,不像是以前做的点什驱动程序之类的一看书,马上就有效果了。
解决方案四:
这个是原则,意思就是模块内要关联紧密,模块外(模块与模块)尽量少依赖,也就是怎么细划模块的问题,但是对于不熟悉者来说,还是先定义并实现软件功能,再考虑改进。想一步到位要很多知识和经验积累出来,建议先用快速原型法。
解决方案五:
初学者吗,可以一开始就接触这种以及其不错了。
解决方案六:
打错字了:初学者吗,可以一开始就接触这些已经不错了。
解决方案七:
codecomplete
解决方案八:
模块接口,可以考虑使用webservices
解决方案九:
就说几个实际问题吧,我现在一个大编辑器模块切成小更小两个模块,其中一个小模块是用来指示当前正在查看的行(这样做是位了是减少刷屏),另一块是一个负责显示的文本的,再把这两块拼成一个大编辑器模块。既然是文件编辑器模块必然会读文件和写文件,那么读取文件这些操作逻辑是放在小模块里,还是最后大编辑器模块?
解决方案十:
刚刚开始可以先尝试一下。慢慢就熟悉了
解决方案十一:
引用5楼gws044010607的回复:

打错字了:初学者吗,可以一开始就接触这些已经不错了。

是初学者啊,绝对的初学!天天活很杂,基本什么都尝试过,裁WinCE,驱动程序,网络通讯,编写PLC,反正都摸过,就是只知道皮毛,所以现在做起是片空白了。比较痛苦
解决方案十二:
对新手来说,那就不要一步走太远了,步子太大就容易扯蛋了首先不动现有接口,先把代码本身尽量拆解为原子级别,拆解规范参考《重构》至于对外接口变动,我暂时不建议变动,你还是先完成第一步在说ps:。既然是文件编辑器模块必然会读文件和写文件,那么读取文件这些操作逻辑是放在小模块里,还是最后大编辑器模块?请考虑一下文件读写,怎么会和大模块,小模块关联滴。做为通用原子功能,他和你的应用程序模块没有必然联系。所以文件读写本身就是独立功能。
解决方案十三:
引用11楼wanghui0380的回复:

对新手来说,那就不要一步走太远了,步子太大就容易扯蛋了首先不动现有接口,先把代码本身尽量拆解为原子级别,拆解规范参考《重构》至于对外接口变动,我暂时不建议变动,你还是先完成第一步在说ps:。既然是文件编辑器模块必然会读文件和写文件,那么读取文件这些操作逻辑是放在小模块里,还是最后大编辑器模块?请考虑一下文件读写,怎么会和大模块,小模块关联滴。做为通用原……

嗯,说得是。烦请给点指导吧。
解决方案十四:
引用10楼cjdxling的回复:

引用5楼gws044010607的回复:打错字了:初学者吗,可以一开始就接触这些已经不错了。是初学者啊,绝对的初学!天天活很杂,基本什么都尝试过,裁WinCE,驱动程序,网络通讯,编写PLC,反正都摸过,就是只知道皮毛,所以现在做起是片空白了。比较痛苦

没事,慢慢来,大爷都是孙子过来的。像那位仁兄说的,步子大了容易扯着蛋。
解决方案十五:
那们高手用c#写过类似的编辑器模块,能否提供点源码,给我膜拜一下吧。刚刚领导说了说憋一天东西,基本被枪毙。
解决方案:
编辑器这块,应该是有开源的玩意在codeplex上有很多这类型的开源项目http://www.codeplex.com/site/search?query=code%20editor&ac=1
解决方案:
高内聚、低耦合,有些人嘴上喊了十年也没有真正做到,慢慢来......
解决方案:
publicpartialclassTextEditorPanel:UserControl{publicTextEditorPanel(){InitializeComponent();}#region对外方法///<summary>///打开文件///</summary>///<paramname="s">文件名</param>///<returns></returns>publicintOpenFile(strings){return0;}///<summary>///关闭文件///</summary>///<returns></returns>publicintCloseFile(){return0;}///<summary>///保存文件///</summary>publicvoidSaveFile(){}///<summary>///另存文件///</summary>///<paramname="s">保存的文件名</param>///<returns></returns>publicintSaveFileAs(strings){return0;}///<summary>///向前查找字符串///</summary>///<paramname="s">被查找的字符串</param>///<returns>找到字符串,返回字符串所在行号</returns>publicintFindNext(strings){return-1;}///<summary>///向前查找字符串///</summary>///<paramname="s"></param>///<returns>找到字符串返回字符串所在行号</returns>publicintFindPre(strings){return-1;}///<summary>///跳转到指定行///</summary>///<paramname="lineIndex">行号</param>///<returns>跳转成功返回0,行号不存在返回-1</returns>publicintGoToLine(intlineIndex){return0;}///<summary>///复制选中行///</summary>///<returns>复制成功返回0</returns>publicintCopySelectedLines(){return0;}///<summary>///粘贴选中行///</summary>///<paramname="desLineNum">粘贴的目标行号</param>///<returns>粘贴成功返回0</returns>publicintPasteSelectedLines(intdesLineNum){return0;}///<summary>///删除选中行///</summary>///<returns>删除成功返回true</returns>publicboolDeleteSelectedLines(){returntrue;}///<summary>///向后替换文本中的字符串///</summary>///<paramname="sourceStr">替换的源字符串</param>///<paramname="targetStr">替换的目标字符串</param>///<returns>替换成功返回ture</returns>publicboolReplaceNext(stringsourceStr,stringtargetStr){returntrue;}///<summary>///向前替换文本中的字符串///</summary>///<paramname="sourceStr">替换的源字符串</param>///<paramname="targetStr">替换的目标字符串</param>///<returns>替换成功返回ture</returns>publicboolReplacePre(stringsourceStr,stringtargetStr){returntrue;}///<summary>///获取当前行的文本///</summary>///<paramname="str">当前行的字符串</param>///<returns>当前行在文件的中的行号</returns>publicintGetCurrentLine(refstringstr){return0;}#endregion#region属性///<summary>///设置编辑器的位置///</summary>privatePointpanelLoaction;publicPointPanelLocation{set{panelLoaction=value;}get{returnpanelLoaction;}}///<summary>///是否选中编辑器中的当前行///</summary>privateboollineSelected;publicboolLinSelected{set{lineSelected=true;}get{returnlineSelected;}}publicstructPanleSize_t{publicuintwidth;publicuintheigth;}///<summary>///设置编辑器尺寸///</summary>privatePanleSize_tpanelSize;publicPanleSize_tPanelSize{set{panelSize=value;}get{returnpanelSize;}}///<summary>///或取编辑器中的文件是否发生过编辑行为///</summary>privateboolmodified;publicboolModified{set{modified=value;}get{returnmodified;}}///<summary>///是否允许编辑文件///</summary>privatebooleditingValid;publicboolEditingValid{get{returneditingValid;}}publicenumEditingModels{Watch,WordModify,LineModify};///<summary>///设置编辑模式///</summary>privateEditingModelseditingModel;publicEditingModelsEditingModel{set{editingModel=value;}get{returneditingModel;}}///<summary>///设置行标记的“行标记”可见性///</summary>privateboollineMarkVisble;publicboolLineMarkVisble{set{lineMarkVisble=true;}get{returnlineMarkVisble;}}///<summary>///设置编辑器“行标记”的颜色///</summary>privateColorlineMarkColor;publicColorLineMarkColor{set{lineMarkColor=value;}get{returnlineMarkColor;}}///<summary>///获取当前文件的总行数///</summary>privateintlineCount=0;publicintLineCount{get{returnlineCount;}}#endregion把自己定义的一部分接口给贴出来,烦请各位指导
解决方案:
感觉好像还是少了几个接口,比喻说事件之类的

时间: 2024-08-02 19:33:41

怎样合理的定义自己模块的对外接口。的相关文章

seaJs的模块定义和模块加载浅析_Seajs

SeaJS 是由玉伯开发的一个遵循 CommonJS 规范的模块加载框架,可用来轻松愉悦地加载任意 JavaScript 模块和css模块样式.SeaJS非常小巧,小巧在于压缩和gzip后体积只有4K,而且接口和方法也非常少,SeaJS 就两个核心:模块定义和 模块的加载及依赖关系.SeaJS非常强大,SeaJS可以加载任意 JavaScript 模块和css模块样式,SeaJS会保证你在使用一个模块时,已经将所依赖的其他模块载入到脚本运行环境中.玉伯的说法,SeaJS可以让你享受写代码的乐趣,

详解阿里妈妈淘客系统对外接口通用规范

<阿里妈妈淘客系统对外接口通用规范>(以下简称"淘客规范")其实写的还是比较详尽的,只是在具体描述上不够连贯,才造成了大家的误解. 一.对于"淘客规范"2.4中的说明相信大家应该比较容易理解 http://taoke.alimama.com/rpc/ searchAuctionByRpc.do?pw=XXXXXX 返回结果: cat_id,parent_id,cat_name 16,0,女装/女士精品 30,0,男装 3415,34,音乐CD/DVD 1

定义一个选择机房的接口

问题描述 定义一个选择机房的接口 定义一个选择机房的接口,实现路由规则_****_ 比如用户登录时调用此接口自动选择机房地址

单点登陆系统里保存有session值,模块怎样通过接口访问session值?

问题描述 单点登陆系统里保存有session值,模块怎样通过接口访问session值?项目有这样的需求,用户通过一个登陆框登陆后,可以实现模块间的跳转,那么就需要用session记录登陆状态,但是我发现调用web服务时(返回session值),获取session值时出现堆栈出错,访问不到这个session值,我刚接触webservice,不是怎么了解,希望高手们赐教.... 解决方案 解决方案二:既然是系統,那肯定有開發的接口.解决方案三:webservice能接收session?解决方案四:可

Effective C#原则22:用事件定义对外接口

可以用事件给你的类型定义一些外部接口.事件是基于委托的,因为委托可 以提供类型安全的函数签名到事件句柄上.加上大多数委托的例子都是使用事件 来说明的,以至于开发人员一开始都认为委托与事件是一回事.在原则21里,我 已经展示了一些不在事件上使用委托的例子.在你的类型与其它多个客户进行通 信时,为了完成它们的行为,你必须引发事件. 一个简单的例子,你正 在做一个日志类,就像一个信息发布机一样在应用程序里发布所有的消息.它接 受所有从程序源发布的消息,并且把这些消息发布到感兴趣的听众那里.这些听 众可

ECMAScript 6 入门

链接 建议 letvarconst 解构赋值 字符串 函数 数组 对象 Symbol Set Map Proxy Reflect Promise Iterable Iterator Generator async await Class Module 参考资料 1 链接 个人博客: alex-my.xyz CSDN: blog.csdn.net/alex_my 2 建议 建议先看看关于this, call, apply, bind相关的内容,后文有涉及 参考: Javascript中的this,

架构之坑系列1:重构中的过度设计与高可用银弹

这是一个坑系列,会说一些在系统设计.系统架构上的坑,这些都是我想到哪说到哪,有像这篇一样比较宏观的坑,后面的文章也会有到具体技术细节的(比如某个函数,某个系统调用)坑.总之,到处都是坑,这些坑有些是我经历过的,有些是听说的,你也可以留言说说你遇到的坑.   第一部分,我们从重构这个场景来看看系统架构的设计中过度设计这个坑.首先,我们这里说的重构,和<重构:改善既有代码的设计>这本书中的重构不太一样,这是本好书,他主要说的是代码级别的重构,这种重构是需要在编码的时候时时刻刻进行的,更多的是一种编

webpack+vue.js实现组件化详解_javascript技巧

简介 在vue中实现组件化用到了vue特有的文件格式.vue,在每一个.vue文件就是一个组件,在组件中我们将html,css,js全部写入,然后在webpack中配置vue-loader就可以了. 建立vue组件 在src目录下建立components文件夹,并在其中建立app.vue文件,这样我们项目的目录结构如下: |--dist //webpack打包后生成的文件夹 | |--build.js |--node_modules //项目的依赖所在的文件夹 |--src //文件入口 | |

怎样成为优秀软件模型设计者

导读:文章转自博客园,作者heartstill写了一篇<怎样成为优秀软件模型设计者>,文中阐述了不同观点,见解独特,构思新颖.以下是文章内容: 我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢?将下列原则应用到你的软件工程中,你会获得立杆见影的成果. 1. 人远比技术重要 你开发软件是为了供别人使用,没有人使用的软件只是没有意义的数据的集合而已.许多在软件方面很有成就的行家在他们事业的初期却表现平平,因为他们那时侯将主要精力都集中在技术上.显然,构件(component