我是一个已经入门了一定年限的新手,非专业的,目前已经作出了一些小的程序(譬如爬虫、工作上的管理系统等),也会写一些代码,还能跑起来,对 HTML、CSS、JavaScript 也有一定的了解,也看过元编程、面向对象等书籍,感觉有一定朦胧的理解和感悟,但是发现这样一个问题:每当我有一个想法,想做一个稍微大一点、复杂一点的应用,就会发现非常茫然和混沌,写着写着就感觉自己是在瞎写,这种瞎写体现在对象的构建、架构的规划、文档的整理等等,通常是想法很美好,落地很悲惨。
举个例子,例如我想做一个围棋程序,棋盘、棋子静态的都画出来了,按照我的想法,可能要有“棋盘”、“棋子”、“棋手”、“裁判”、“记录”、“规则”等对象,但是下一步,怎么把这些对象串联起来,怎么样让他们之间互相能相互交流、传达指令(方法),能成为一个整体并进而“活”起来,却感觉很为难,不知道怎么去统筹规划。
不知道大家是怎么看待这个问题?是怎么突破想法(需求)和形成应用软件的之间的这个“鸿沟”的?怎么样的整体的去考虑,而不是一点一点的添灯油、打补丁,想到哪儿写到哪儿,写到哪儿算哪儿这种问题?
希望各位大佬、过来人能给一些指点迷津,指一些方向。
你现在面临的问题,是提高「架构」设计能力,就是怎么设计 model,怎么进行状态同步(不同浏览器可以通过 websocket 来同步状态)。要突破这个难题,比较好的办法,也是比较痛苦的办法,就是阅读开源项目的代码,越复杂的越好。这样才能学到复杂产品的架构设计。
问了一下 chatgpt,这是他的回答: 你遇到的这个问题并不少见,很多人在编写大型应用程序时都会遇到类似的挑战。在构建一个大型应用程序时,需要考虑很多方面,包括对象的组织、架构和交互,以及如何使它们合作,才能实现一个完整的、协调的应用程序。
针对你的围棋程序,你可以考虑以下步骤:
确定应用程序的规模和范围。你需要想清楚你的围棋程序要包含哪些功能和模块,要满足哪些需求。
确定所有的对象和对象之间的关系。你可以把所有的对象写成一个对象模型图,这样可以更好地理解它们之间的关系。你可以用类图工具来绘制一个对象模型图。
确定每个对象的属性和方法。你可以为每个对象写一个清单,包括每个对象的属性和方法,并确定每个方法的输入和输出。
设计整个应用程序的架构。你需要确定哪些模块是需要的,它们之间的依赖关系是什么,以及整个应用程序的架构是什么样子的。你可以使用一些架构模式来帮助你进行设计。
开始编写代码和测试。在编写代码之前,你需要把整个应用程序的设计文档整理好,包括对象模型图、对象属性和方法清单、应用程序架构等。这样可以确保你的程序在实现时遵循了整体的设计,减少了添灯油、打补丁的情况。
完成程序并进行优化。完成程序之后,你需要对程序进行优化,确保它能够快速高效地运行。
最后,你需要注意的是在设计过程中需要理性的评估自己的能力和时间,有些思路非常美好的想法可能在实现时需要大量的时间和精力,而有些功能则可以在后期再加入,逐步完善。
如果真的想做产品,ruby 或许不是个好的选择。
咬文嚼字的地方太多,随着深入的使用,会陷入“把玩 ruby”的深渊,就像孔乙己琢磨茴香豆的茴字有几个写法。
如果不用 rails 框架,更没有必要了,是 rails 拯救了 ruby
结构清晰,逻辑合理,对象模型设置恰当就可以了。我想象的应该是从整体到局部,从宏观到微观,从粗线条到细线条勾勒出来的,而不希望整个应用是一点一点糊出来的,一点一点打补丁补出来,过了十天半个月自己也看不懂,对瀑布开发、敏捷开发、在没有整体勾勒情况下随性开发这种不是很喜欢。
做应用程序还是得先把产品搞明白,定位、受众、核心功能。然后进行数据建模,想想数据库需要哪些表、每个表要什么类型、彼此之间什么关系。最后后写接口、页面就好了。
从最简单架构开发起步,然后一点点补丁。能从头开始就设计好的软件,应该不是让你迷茫的程序。事实上,补丁出来的软件在推出正式版之前,是可以按设计者的思想重构的。