我在进行第一个大型项目时学到的东西

八个月前,我开始在Electron上编写应用程序。为了掌握此任务,我必须开发在不同环境中运行的三个单独的子应用程序。在下文中,我将讨论自己为自己所做的事情。



原始形式的活页夹

语境


在深入研究细节之前,我将首先提供一些了解情况的一般信息。从2019年初开始,我开始按照合作社计划要求对我的学位进行实习。到四月份,我已经寄出了几十份简历,每份都是针对特定雇主量身定做的,总共收到的答复恰好为零。您可以想象我对此有何反应-我的手掉了下来,似乎我不适合任何工作,根本不值得做任何工作。但是,我决定让自己证明自己仍然知道一些东西,并且可以申请一些职位,而不是让这些感觉占上风。最后,我发现实际上我知道的比预期的要少。

我开始修改我的项目,以寻找可以变成大型而复杂的项目,这可以激励我前进。最后,我选择了Binder-当时的简单Web应用程序允许您同时管理Onedrive,Google Drive和Dropbox中的文件。我们的目标是开发一种备份服务,其功能可与三位一体相提并论,不包括将文件传输给其他用户的能力。

方式的开始


如果我从一开始就没有设定自己的妄想目标,那么我可能根本不会完成该项目。我为自己确定的第一个里程碑是为我的生日创建了一个工作的Alpha版本,该版本于7月中旬庆祝。我立即开始工作。到5月初,我创建了一个Binder克隆并开始将其分解为多个部分,从而丢弃了许多不再需要的功能。总的来说,我采用了一个完全不错的应用程序,并将其变成了教程级别某个地方的普通代码。

我决定编写四个单独的应用程序。第一个是将在用户计算机上本地运行的客户端。第二个是带有后端的API,它将有助于安全请求的发送。第三,云服务,负责存储在其上的所有数据的完整性。最后,是“营销”网页,因为如果没有闪闪发光的网站,产品就无法做到。

现在乐趣开始了


好吧,好吧,我承认:到目前为止,我所说的一切都与Electron无关,更不用说大规模应用程序的开发了。但是我需要澄清上下文,以便您了解我从哪里获得知识。这是我为自己学习的五个主要课程:

#1确保前端和后端使用传统结构,因为进程间通信是很愚蠢的事情

由于我在Electron中如何实现原始的进程间通信(现在又对psycho了),我比我想的更频繁地跳槽。是的,进程间通信通常不旨在按照Javascript的精神进行数据抽象,而是将函数表示为对象以及各种其他事物。但是那会容易得多!因此,虽然没有编写一个简单的客户端应用程序,而是将主要的代码数组放置在主流程中,但我被迫明确区分将与用户交互的内容和不与用户交互的内容。我确定将要去到主流程的什么标准以及到渲染过程要去的标准,被制定为一个简单的问题:此代码有作用​​吗?片段大小无关紧要。如果他提供了其他代码,然后进入主要过程。唯一的例外是Stripe支付系统端点-出于安全原因,我希望将其放置在尽可能靠近用户的位置。

第二,使数据保持完整性非常非常困难,

直到我开始从事Binder的工作之前,我还不明白要使来自任意数量的用户的所有数据始终保持正确和可访问性有多么困难。为它们提供安全的存储并不是一件容易的事,但是现在您仍然希望我验证所有这一切,并确保与其他数据没有矛盾,而又不知道数据是什么?

当然,我在这里有些夸张,但问题的实质并未扭曲。验证应该在最早的阶段尽早进行,然后随着数据流的进行重复(以较小的规模)。如果每次更改数据时都使用事务模型,则保持一致性变得更加容易。实话实说,还有数据本身,还有大量的元数据,管理起来并不容易。编写一个读取用户数据然后执行完整性检查的功能似乎总是一个好主意。但是经过深思熟虑,我得出的结论是,秘密入口与前门没有什么不同-整个区别在于谁使用了它们。

3号界面-像缝制鞋一样



制作美观,功能良好的界面的一种好方法是将其视为一双单独的剪裁鞋(或根据形状量身定制的西装,没关系)。我开始为Binder设计时问的第一个问题:谁来看看应用程序界面?注意:我没有谈论谁将使用该界面。这应该是第二个问题,因为一切都与外观紧密相关。过去,我进行了许多项目,我可以满怀信心地告诉您:人们希望在您的应用程序看起来不正确时吐唾沫。



我从在笔记本上制作小草图开始(使用圆珠笔,因为我有不断怀疑自己想法的习惯)。在最初的草稿中,重点是界面的一般结构,然后,我进一步详细介绍了每个“页面”的外观。我认为,所提供的信息并不比其可读性重要。

4号没有太多的容错能力

我不认识您,但是我想到API会在我接受付款后崩溃,这让我不寒而栗。我开始在支付系统上工作,我对自己说:“现在您再也无法错过一个错误。”我确保在整个过程中实施安全机制:从API收到购买服务包的请求开始,直到Stripe将付款信息传递到事件通知系统并激活该包为止。当然,这种偏执会减慢开发过程,但我不后悔。但是我总是有关于付款时间,目的是什么以及应采取的措施的状态如何的完整信息。

5号不是很完美吗?不吓人

我是一个完美主义者,我创造令人惊叹的东西的尝试常常变得一发不可收拾,并无休止地挑剔每一行代码,并怀疑它们是否有权存在。我必须一遍又一遍地与自己进行斗争,以解决更重要的问题-效率或可读性。在最初的几个月中,我还没有看到我的视线,也不了解我浪费了很多精力并没有任何实际好处-关键是要制造一种可以冷静使用而又不会伤害的产品获得一些享有盛誉的奖项。有趣的是,我的第五堂课部分地与第四堂课背道而驰,但这很好。第四节课提醒我注意和注意用户期望,第五节课设定了界限,以免卡住我,不断改善一项功能。

在说再见之前


您读完我的文章后可能会发现(无论是否)Binder尚未完全运行。在撰写本文时,我只是发布了第一个公开版本(测试版4)。我并不是特别想将Binder变成成熟的产品,但是尽管如此,我还是将其开发为可以正常使用的产品-突然,雄心勃勃的野心就会接me而至。彩虹般的网页可以在这里欣赏

我认为开放访问安全的所有内容都发布在GitHub 的项目页面上。我将在此处发布更新(您可以在此处下载客户端,以便客户端自行更新)。嗯,这是我在四个子应用程序上汇编的统计数据,以讨好我的虚荣心:

本地粘合剂(Electron上的客户端)



活页夹网站(精美网页)



在剩下的两个中,出于安全原因,我没有自动开始对代码行进行计数。

活页夹API

  • JavaScript:21个文件,4117行
  • 其他文件:〜150行

粘合剂蒙哥(检查完整性的服务)

  • JavaScript:16个文件,2374行
  • 其他文件:〜140行

总代码行数:30,015

All Articles