我现在有一些工具类,我应该不应该做自己的框架?

📅 2026/7/5 3:31:28
我现在有一些工具类,我应该不应该做自己的框架?
那框架完全是废物吗非也。能产生这种东西就表明它必定有它自己的用途。我们有一个业务这个业务有它自己的模型、规则、流程等等。但是有些不确定的东西会未来才接进来那么我们就非得有一个框架不可比如图形界面就是这样。【1】不过更多时候我发现事情真的有更简单的办法把机制或者功能集合中的一些元素粘合一下这样很简单产生变化的时候重构的工作量也小。而且并不影响重用或者说能够更好的重用因为各部分粒度比较小。关键是真正认识我们要处理的业务的实质是什么。这个实质不是指这个业务对人类来说是什么而是说这个业务在现有的不能抛弃的抽象层上是什么。对我当前的目标记住这是可变化的而言这个抽象层包括计算机本身、操作系统、基础库和通用的协议。要注意的是抽象层在某种意义上并不是真的抽象而是一种具体化。比如你有2G内存而不是无限的图灵机纸带比如硬盘很慢比如软件根据实际情况做出的妥协。看起来四处都是抽象层所以上面强调了“不能抛弃”。过去我很擅长.NET.NET及围绕它产生的一系列环境是我用过的可以说最舒服的编程基础设施。我也对ASP.NET极其熟悉基本上可以弄清楚每一个细节。但我最终学会的一件事就是它不是一个不能抛弃的部分。这说到最后还是它提供的东西带来的便捷和它按照它的作者的意愿具体化的部分带来的限制或麻烦之间的一个权衡。所有的Web业务从根本上就是按照一定的协议和文档格式比如HTTP/HTML又是一个抽象层但我们不能抛弃否则没人能用我们的东西根据参数生成字符串的这么一件事情。决策当HTTP和HTML这些东西设计定稿的时候可以说所有的规划就做完了在这个基础上有足够的约定和共识落在了纸面上最后又变成了机制和策略。只要不破坏他们事情就玩的转剩下的东西就是多加进去的这和图形界面框架的必要性形成了一个对比就必须“给个理由先”。很多人不愿意这样看问题包括最初我沉溺在ASP.NET中的时候。因为这会让我们感觉回到了ASP时代是一种倒退如果跟别人交流看起来好像我们土的掉渣、不求上进。我不知道我们是如何产生这种感情的也许是因为在我们经验比较少的时候我们就会不够自信、不够坚定。【2】有一点也是必须要认识到的不回答这个问题我们不能说服自己大家都在用ASP.NET或XX。这其实也就说明了ASP.NET是给谁做的。更多的我们就必须回答我当下处境和“大家”一样吗这个答案决定了我们要不要动手去做也就说技术选型。既然有这个词就有这个词对应的工作量。对于这个词需要明确的是我们选的是“型”而不是若干个成品。只有比较“型”和成品的符合程度才能得出结论也许是在人家的框架上做一些库就非常舒服了也许是做一个自己的框架更加适合自己的需求。或者不定义任何策略提供一堆机制根据问题现场组装。现在我们决定做一个框架了我们一直在用ASP.NET关键是我们在一个别人画的圈子里玩不出太大的花来。当然我们的目的不是玩花而是肯定先要感受到需求。那么我感受到需求了我觉得ASP.NET束缚了我我怎么办呢执行首先明确一点如果说我们承认框架是有用的我认为框架也应该尽量小或者尽量空大多数情况下应该属于可以以较小代价推翻的东西。而且一个值得注意的要点是不能把功能和它揉在一起做因为这样我们会最大概率的得到Linus所谓“漂亮的坚固堡垒”碰着点真正的相对于假设的变化就会歇菜。一个个人经验是更加重视局部输入输出的明确简单少玩精巧的对象交互使组织部分成为一个灵活的粘合层。具体到要在ASP.NET下做真正的框架我的建议是从Handler和Module上做不要用一切微软制订的更上层的东西WebForm、MVC这对于框架作者来说不是什么有用的东西它们逼你削足适履。我们首先要有自由才能够把需求让我们产生的那个想象的东西按它本来应该有的样子画出来。另一方面是信心我们总会有这样那样的顾虑让人裹足不前。有些人觉得编译器难写、操作系统难写有些人觉得ASP.NET的作者们写的那些东西难写。我能说的是凡是ASP.NET实现了的东西都是没有什么难度的这就使得工作变得可评估。无论从技术细节上来说还是从设计上来说。对于后者恰恰仅仅是ASP.NET的作者们他们自己收集了若干需求然后产生了一些这个东西应该这样那样的想法。我们不应该被这些影响除非我们不确信我们的需求是真的否则我们就不会做出比他们更差的决定。尤其是目标越明确越具体我们的设计就会越有优越性。在这个基础上信心怎么来呢我们不启动老在那里准备永远没有信心。事实上从最初开始比如继承一下Handler的接口打印一行Hello world就能极大的增强信心剩下的事情就是如何把这行字换成更有用的东西这部分如何组织这就是你的框架了。最后当然我们必须有明确的需求而不是受了别人的影响就说我要做一个MVC、我要更好玩转那些Entities我们读到的东西更多的是一种参考有启发就想想没有就暂时扔掉。关键是说我有一个点子它能让我们生活至少是我眼前关注的这块业务的更容易就是这样。最后程序员或开发人员往往也是编程的爱好者。在这种情况下只要闲得没事干自己做一些东西哪怕只是一个原型也总是好的。只是需要记住一点首先要确定我们要解决什么问题放空炮能得到的益处可就要小多了。