感觉自己的架构水平好弱,请问有没有推荐的最佳实践教材?

2017-01-03 10:30:44 +08:00
 mokeyjay

我是个普通的 PHP 码农,正式工作一年多一点了

框架熟练 CI ,会用 yii2 、 TP3/5

做的项目越多、越大,就感觉自己的架构水平越辣鸡;代码能写、能用,各种编程基本概念都懂,但就是不知道怎么合理运用它们。

例如让我做个 xx 系统,需求我都明白了,但我总觉得自己写出来的代码不够优雅,尤其是如何划分一些类以及类之间的继承、抽象关系上,要么就是写着写着耦合度又提高了;在数据表设计上也是这样,属于那种 道理我都懂,但就是不知道怎么去做 的感觉

所以我想问下各位,有没有那种用实际(或虚拟)案例来做分析,教授如何优雅划分类、设计表这样的教材?载体不限,书籍视频都可以,收费也行

7543 次点击
所在节点    程序员
62 条回复
Felldeadbird
2017-01-03 17:54:02 +08:00
架构就是你写代码的经验啊。 这东西是随着你开发经验来完善的。即使你看完了世界名师的架构框架,你没有从实践中总结出经验,你写出来的代码和现在的水平是相差无几的。
winiex
2017-01-03 17:58:23 +08:00
你指的是代码层级的设计,这个和我们常规意义上说的架构联系不大。单说代码层级的设计的话,多写多修改,有经验了深刻理解下设计模式、重构,再反过来指导改进代码。再就是多看别人写的好代码,依葫芦画瓢。数据库的设计先读一本经典的教材,从了解范式入手。

进入实践-读书-反馈到实践中的优化循环就上路了。

书就先不推荐了,你应该已经有了比较多的代码实践,可以先了解常见的设计模式,然后读一个 mvc 、依赖注入类框架的源码。 PHP 系的可以看看 laravel 的源码。
winiex
2017-01-03 18:05:09 +08:00
然后就是一些依靠自己平时多关注的最佳实践的积累了,比如看了 laravel model 的设计后你就会发现,一个关系型数据库表在设计字段的时候通常会加入 id 、 createdAt 、 updatedAt 、 deletedAt 等必要字段,然后自己思考后考虑到数据会存在类型、状态,所以每个表还会添加 type 、 status 字段。后来你又看到互联网 web 领域的后端应用一般要求最终一致性并注重低延时,所以你就取消了外键字段,用单独的 id 字段来记录记录之间的关系。

没有多大诀窍,花时间去积累去关注。
xiparos
2017-01-03 19:27:47 +08:00
xiparos
2017-01-03 19:28:01 +08:00
BigDipper7
2017-01-03 20:37:36 +08:00
@winiex 问个问题哈,我还没到架构这个层面,咳咳 取消外键字段的话,那么数据一致性靠代码来保证么,咳咳咳,而且外键依赖不是只影响写入效率么,不影响读吧😊
mhycy
2017-01-03 21:08:25 +08:00
“看需求”

不要为了应用某种设计模式而强行编码,有时候面条代码(面向过程)反而是更合适的实现方式。
每一种开发理念都有其合适的应用场景的。
( JAVA 啰嗦,但是在合理设计文档充分的前提下, JAVA 很适合开发健壮性足够高的业务代码。)
konakona
2017-01-03 21:24:24 +08:00
我就给你一个意见:你不要只看 PHP 好吗?
jeremaihloo
2017-01-03 21:26:27 +08:00
从最近看 C#的 Orchard2 得到的经验是,多看优质的代码,受益匪浅
theohateonion
2017-01-03 21:30:14 +08:00
架构这个东西和设计模式一样,属于一套形而上的东西,更像是先人把自己的经验进行总结后的产出。所以最好的方式毋庸置疑是看源码
tairan2006
2017-01-03 21:39:15 +08:00
看框架源码
eyp82
2017-01-03 23:08:09 +08:00
个人感觉不用刻意追求这些东西:
1. 平时多看好的项目的代码, 感觉到了自然就到了
2. 可以追求好的架构, 可能会得不偿失
3. 有时候是真没时间搞什么好架构
mokeyjay
2017-01-03 23:43:14 +08:00
@a15819620038 对对,我确实是想问“怎么在代码里把类组织好”以及“如何设计数据表”
@zuston 额不好意思我点错了
@huijiewei 请问“可测试化”是指单元测试吗?
@winiex 感谢耐心回答,这么多人都推荐 Laravel ,我一定要去看看
dai269619118
2017-01-04 09:21:57 +08:00
真考虑框架的速度,还不如自己写最基本的 mvc 比 85%的框架速度都快
zscself
2017-01-04 09:41:35 +08:00
来呀,一起写 Java 呀。[滑稽]
misaka19000
2017-01-04 10:50:57 +08:00
@mokeyjay PHP 我也写过,写完之后发现这货真的是天生就是为 Web 而生的,而且 PHP 的优势就是快,写起来简单,架构能力这种反而是 PHP 的短板,放着 PHP 的长处不用为什么非要去发扬它的短处呢

如果非要谈这些架构,为什么不用 Java , Python 这种语言呢
Miy4mori
2017-01-04 15:53:35 +08:00
想要入门架构设计,推荐你读读软件架构设计,当然,如果你想要的其实是实现整洁优雅,你可能需要的是 effective 系列而不是学架构设计
Miy4mori
2017-01-04 15:57:02 +08:00
@mokeyjay 如何设计数据表这是需要经验和结合业务来谈的,如果你想要避免设计出反人类的表,你可以读读 SQL 反模式这本书,还是有点用的,至于如何设计出最适合业务的,这个一般没有书讲,只能你自己去深入了解业务,或许可以查查领域模型设计相关的资料。
winiex
2017-01-04 17:55:55 +08:00
@BigDipper7 一致性是分几个级别的,一般来说,除了类似于支付宝设计资金流转这样的一致性极敏感业务, web 后端的一致性要求都不高,在 CAP[1] 中 Web 后端应用舍弃了 C ,而强调 A 、 P 。

至于不用外键,这个原因很多,你可从 Web 后端应用的特点与外键的优劣来理解,可以参考这个[2]。举个例子, Web 后端的业务决定了删除数据记录以置脏位为实现,外键也受到了类似的限制。带外键的表写入效率低下是主要原因之一,外键不能支持后端数据库服务水平扩展(简单描述的话就是加机器)也是一个重要原因。

[1] http://julianbrowne.com/article/viewer/brewers-cap-theorem
[2] http://stackoverflow.com/questions/83147/whats-wrong-with-foreign-keys
BigDipper7
2017-01-05 00:20:52 +08:00
@winiex 谢谢大佬,嘎嘎,从来没想过这个,涨姿势了 😄

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/331836

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX