StrangeIOC适合你吗?

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底层运行机制后,拓展起来也会得心应手。后面我会整理他的一些文档进行翻译,也会整理一些个人的使用心得,也希望能将这些学习到的知识进行自我积累和沉淀。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言 unity的框架,除了各大公司自己内部使用的,开源并好用的实际并不是很多,我会慢慢挖掘,依次写出自己的一点见解,错误的地方,望各路大神指正。 一、基本概念 控制反转(Inversion of Control,英文缩写为IOC),我的理解就是,原本A类要获取B类的对象,需要你在A类中自己New一个对象,那么是由A来获取并控制B的对象,IOC就是把对象获取的这个过程交给容器和依赖注入来处理,A类并不知道B的对象是哪里来的,对B对象的控制,由自己变成了其他类,官方一点的概念可以百度,这个还是蛮多的。 二、StrangeIOC基础类型 实际要理解一个框架的类型,还是要自己看源码,这里我只说一下几个重要类型的作用,这个看源码的时候有个印象,也方便理解,而且说这部分的帖子也很多,我就不再赘述了。 1.Context 上下文组件定义程序边界,也就是可以把一个程序定义成多上下文,让代码更加模块化 它提供了程序入口,也算是框架中耦合度最高的地方 2.Binder和Binding 这两个类是这个框架最重要的组成部分 Binding存储了对象的绑定关系,而Binder存储了Binding的对象 3.View和Mediator MVCS中的View层,View只用于显示,也就是View只负责管理UI,Mediator负责界面逻辑,事件响应等 4.Model MVCS中的Model层,负责数据部分 5.Command MVCS中的Control层,负责执行逻辑代码 6.Service MVCS中的Service层,负责与第三方交互,这个Service我理解的,并不是一定指代服务器,也可以是其他的软件,什么都可以,它就是我们程序对外的接口 7.Dispatcher 派发器是框架内通信主线的其中一种,用来派发消息,触发命令,从而进一步解耦 8.Signal 信号是框架内另外一种通信主线,它采用强类型,来绑定信号和命令之间的关系,实现消息响应的触发 9.ReflectionBinder 反射部分,通过binding来获取类的信息,存储在ReflectedClass中 10.injector 注入器,通过反射获取的信息,来实例化请求的对象 --------------------- 作者:蓝天小僧 来源:CSDN 原文:https://blog.csdn.net/zcaixzy5211314/article/details/80876228 版权声明:本文为博主原创文章,转载请附上博文链接!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值