StrangeIOC适合你吗?
序言
很多开发者在接触和学习StrangeIOC框架的时候都会经历一段很痛苦的磨合期,也会问StrangeIOC是否适合Unity开发。我很高兴为大家分享一下一些经验:看看我们的用户基础,所有的工作室,我们在Unity内外的声誉。当然StrangeIOC是适合的。
但是我也承认对一些项目StrangeIOC并不完全适合。StrangeIOC不是万能钥匙,它有一定的适用性。那么你怎么知道Strange是否适合你的项目呢?很高兴你能这么问。
Strange有一些优点当然也有一些缺点。当项目越能更多的发挥Strange的优势,你会更喜欢使用他。即使是在使用的过程中,对缺陷的合理理解应该有助于您准确地了解产品中Strange的最佳应用。在这篇文章中,我想建议一些你可以用来做决定的指标,这些指标都不会受到即将发布的StrangeIoC 1.0的影响。
项目复杂度
也许最重要的是,Strange是一种处理代码复杂性的工具。您的项目可能很复杂吗?如果我只是随便举个例子,或者构建一个五子棋游戏,我可能不会有动机去使用Strange。然而,我的项目越大,我就越可能需要一些东西来以优雅的方式处理我的依赖项。
StrangeIOC的复杂度
不可否认Strange有一个学习曲线,对一些人来说,这是相当陡峭的。要使用Strange,您和您的团队需要学习使用它。他们不仅需要了解Strange是如何工作的,还需要了解其原因。最终的好处是相当令人印象深刻的,但只有当它们是根据生产说明使用的时候。如果您只是在学习如何编写代码,那么只要知道我们的存在就足够了。学习基础知识,当您开始理解什么是代码解耦,并且想要解决这个问题时再回来。同样,如果您怀疑您的团队是否有能力围绕一个框架进行工作,也不要担心。把责任推到我们身上。
团队规模和复杂性
团队规模也是一个代码复杂性的问题,只是略有不同。在本例中,我们考虑的是不同编码人员代码的各种风格。
这种困难可以通过编码标准来缓解,但是就像每个作者都有自己独特的声音和语法一样,每个编码人员都以自己独特的风格实现自己的想法。在某种程度上这很好。但是当你有一个庞大的团队和紧迫的最后期限时,消除这些差异,比如我可以理解你的代码,你可以理解我的代码,这可能是制定最后期限与否的区别。像Strange这样固执己见的框架往往会促使您以特定的方式编写代码,从而导致更大的同质化。对于许多常见的问题,体系结构解决方案会变得明显和自动,因此您不需要花费时间来考虑它们。当您从一个类转移到另一个类(甚至从一个项目转移到另一个项目!)时,代码看起来很熟悉,您只需很少的学习就可以直接进入。
此外,Strange对多个上下文的管理意味着团队或团队成员可以将项目分解为子模块。每个模块都可以独立构建,然后在开发过程接近尾声时进行连接。
项目的可变性
Strange的另一个关键卖点是其固有的应变能力。一个简单的项目不太可能改变太多。在真实世界环境下运行的真实产品(客户、生产者、产品经理、数据分析师等所有人都在催促您修复、新特性和增强功能)可能会发生很大的变化。这些改变可能是不可预测的,也不受你的控制。
您的项目和环境越不稳定,您需要适应能力的可能性就越大。
程序性能
“你需要多少性能?”下意识的反应自然是“全部”,这很公平。Strange管理与反射相关的性能问题,但即便如此,与请求注入相关的开销也不会太大。通常,与驱动你的视觉效果或运行人工智能算法相比,这是很小的,但即便如此,我们和你一样,希望最小化管理性能消耗。出于这个原因,我们通常建议在最渴望性能的循环中,将与Strange有关的活动减到最少。
所以对你的表现需求要现实一点。在回合制游戏或射击游戏中,Strange的开销是可以忽略不计的。然而,你的游戏越接近性能痴迷的状态,你就越想限制它的活动。
可测试性
单元测试在某些时候是一个巨大的胜利。它也可能是一个繁重的时间消耗。选择哪一个取决于你的经验、专业知识和个人偏好。通常,我发现测试我的模型和服务是明智的。测试控制器取决于复杂性。视图通常很难或不可能测试。无论您的观点如何,如果您重视测试,那么将代码从monobehavior中剥离出来就使得单元测试成为可能。你不需要Strange来做这件事,但它确实有帮助。
集成和兼容性
我在这方面没遇到什么麻烦,但你可能会遇到。我个人从使用Strange中得到的第一个好处就是将nGUi隔离到几个视图类中,从而使它与其他所有类隔离开来。当uGui出现时,重构易如反掌。一些资产毫不奇怪地采用了Strange的哲学上反对的策略,例如使用单例或将非视图逻辑附加到单行为上。同样,对我来说,这是Strange的胜利,因为我可以隔离那些“坏的”实践,将它们封装在一个接口中,并防止它们感染我的代码库。如果有一天我决定用一种资产交换另一种资产,我只需要进行很少的重构,因为我从不让它们失控。
现在,我不能保证你永远不会遇到一个资产会与Strange有兼容性问题。假设你知道。在这种非常罕见的情况下,您可能需要将一些逻辑硬塞进一个Strange的、疯狂的补丁中。灾难?我的书里没有。如果我的90%的代码管理良好,我将欣然接受10%的补丁。我仍然在轻松地战胜困难。
平台
Unity部署到非常多的平台上。Strange还没有全部测试过。我们擅长那些显而易见的东西(iOS, Android,单机和网络)。点击这个 链接
查看我们验证框架的完整平台列表。
我们是Strange?
正如您所看到的,随着代码变得复杂和不稳定,Strange提供了许多优点。其中包括绝缘性、灵活性、模块化和可测试性。它还伴随着学习曲线和一些非常适度的性能成本。对你来说Strange适合吗?我想你已经准备好自己回答了。
个人感受
本人是从2016年就开始接触了StrangeIOC这个框架。开始使用的时候很排斥,写个helloworld都要写半天(按着步骤走都不知道是怎么运行的,完全不理解框架的运行机制)。可能我建个脚本在Start函数内写个打印函数,这个过程可能三五分钟就写出来了个helloworld程序了。我当时最熟悉的就是单例,装饰着,观察者在加上简单的事件派发机制就完事了,因为做过的项目基本上团队也就两三个人就顶天了。但是当你使用了半年或者你有项目变更或者代码复用的时候,会体会到框架的魅力。而且这个框架如果你不了解他的使用方法,请详细阅读他的使用说明。并在熟练掌握后试着去了解他的运行机制,那么你对框架的理解也会上升一个层次。这个时候可能需要一些自己需要的功能,在理解Strange底层运行机制后,拓展起来也会得心应手。后面我会整理他的一些文档进行翻译,也会整理一些个人的使用心得,也希望能将这些学习到的知识进行自我积累和沉淀。