问题描述
最近老大让我写一代码编辑器模块,让我自己定义这个模块的对外接口以及把模块再划分成更小的模块.以前基本是别人定义好了,我只要实现就可以,但现在要我来做,真的是片空白。在此想请各问的给出一些指导。老大还说什么低耦合,强内聚。
解决方案
解决方案二:
没办法,先去学习一下设计模式吧,这东西不是讲两句你就能干的
解决方案三:
引用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把自己定义的一部分接口给贴出来,烦请各位指导
解决方案:
感觉好像还是少了几个接口,比喻说事件之类的