一些随想和少许抱怨

工程结构

在为数不多的阅读记忆中,确实很少讨论工程结构的文章,关键词搜索中也只有ios、Android 相关有讨论过这种问题。对于 Web 端大部分是 MVC 一分了之,之后囤积在 Controller 的代码原来越多,有人说在 Controller 基础上在划三刀,不过似乎没啥用,因此又提出 MVVM 等等结构,但似乎仍旧没什么用,代码该囤积还是继续囤积,重构很痛苦。

但大多数中提到的逻辑分层,亦或是注解等操作,主要给我的感觉是没什么实感。这个实感主要指的是分层的实感,换言之一个好的结构/分层应该暗示或者明确告知码农——你的这个代码应该放在x模块中的y包/命名空间中。或者当其他接锅的人看到你的工程目录大体上能猜到你做过的工作。

工程-模块-包/命名空间-类-方法,基本上由高到低的层次关系,对于某类问题大概率是有通用结构,或者你要开始一个新工程总要起手,这个起手式/套路总会是有的。我见到过一个GitHub上的项目:fast-family是一个快速开发的基础框架,提供各种基类,分布式事务。先看到这个工程结构就很舒服,即便是不使用作者提供的工具类/基类,你也可以在相应的目录下添加自己的代码,起码你知道你的工程的结构,代码在哪里放。因为框架、工具是会根据需求变更,但工程的目录结构不太会。

有时候觉得讨论是否需要Commons、utils文件夹好比过讨论哪个框架优秀,因为用哪个框架不是你说的算的,但是一个差劲的工程结构能膈应到你这是真的。

稍微看看:【简书】iOS工程目录结构的思考iOS架构师之路:工程文件组织结构设计

初学者的Demo

当时学习 java 的时候没人跟我说“没事多看看 apache Commons 之类的工具包,先学会用总结下用法,之后看看源码学习下命名、底层API”。

平常写代码也是遇见什么需求然后 Google 之,也没啥奇怪的。有人说要求甚解,抄完要知其所以然。所以为什么不去直接抄哪些知名工具包的代码呢,说不定那些 blog 的代码也是抄他们的。代代相抄,抄也要抄的好点的。

Ps:也不要完全照搬过来,看懂然后根据自身的需求修改即可。但是放在哪呢,是新建一个 utils 静态类还是封在类中安静的 private 还是其他方案,这要好好想想。

关于 Spring 框架

Spring框架由两大主体:IoC、AOP。IoC 实际上是一个容器,相当于类实例的“集群”管理。因为是容器所以有两大功能:将实例放进(容器中)去、将实例取出来。

为什么会有 IoC 呢,首先它是众多功能的基础,其次提供对实例运行周期的管理。不太喜欢生命周期这个词,生命针对的是有自主性的对象,在此之中的实例都是被动管理。提供运行周期管理意味着提供锚点,锚点意味着扩展点。

使用注解注入容易产生混乱。类和类之间的关系如果用图示表示则圆圈代表类,圆圈之间的线代表类之间的关系。使用注解注入是相当“松散”的行为。如果类之间关系复杂,则代表关系的注解分散在各地。如果需要修改非常的麻烦。

语言表现力

我也不知道为何再逛 CODE Q&A Solved 时候看到一个帖子回答链接到 www.elegantobjects.org 这个站点, 然后花了一周草草的略读了其中的一些文章。说真的如果家里有矿可以考虑买这个作者的书。作者的文章中提出很多的观点,其中有一个观点很有趣。

有时候用setter/getter方法时会产生一阵厌恶感,有时不会。后来我发现了,一些物体(例如factory、builder)用set/get没问题,但对于有生命周期的对象用这个词很不爽。如果解释编程也是基于语言表达,所以也有主语、谓语、宾语。可以对物体set/get,但似乎不能对有生命周期的对象使用,一般动词取put、ask等等。所以设计API的话例如factory.build(instance),其中factory为主语、build为谓语、方法入参为宾语。当然也有其他设计思想,意思是设计时要知道主谓宾修饰对应API的哪部分,这要想好。