Android作为目前移动互联网领域当中的主流系统,其开发无疑成为行业大热。 Android开发人员在工作中不可避免的将遇到项目架构的设计的问题,对于这个问题,很多开发人才虽然具有开发经验,但却不一定能很好地进行解释。对于这个问题,中培教育《Android APP开发应用实践》培训专家刘老师给出了专业回答。
刘老师指出,对很多开发新人来说,这个问题体现着项目分层、功能模块划分以及公共模块提取等基本意识,以及对一些经典架构的理解,比如MVCMVPMVVMCLEAN等。其主要涉及到以下几个方面的问题。
1.你为什么选择使用MVC而不是MVP或者其他架构?
这个问题实际考察的是你对市面上主流的Android架构模式的了解。你至少需要知道每种架构的大致结构,然后了解一下它们各自解决的是其它架构无法解决的什么问题。最后,在谈你自己的选择时,结合项目的特点来说就可以了。其实,大部分学生时期的项目用个MVC就足够了,如果你代码行数最多的Activity都不到百行,那么使用MVP或者其它架构给你带来的额外负担恐怕要比你的收益高很多,切忌矫枉过正。不过,抱着学习心态去使用这些架构都是值得鼓励的。
2.写过BaseActivityBaseFragment怎么设计的?
刘老师的观点是:一是在项目开始阶段可以先提出一个基类,但不用花太多时间想着怎么填充内容进去,很可能得不偿失,其实随着你项目的进展,那些重复实现的内容就会慢慢浮现,这些内容就是需要你在基类里实现的。二是在你实在不知道BaseActiviy里要放些什么的时候,至少可以编写各个生命周期方法中的的log,以及像eventbus这类第三方库的初始化以及销毁操作。
3.你项目中的package划分,是按照层次划分的呢,还是按照功能划分的呢为什么?
按层次划分的package这个大家可能比较常用,那么按功能划分呢可以看下面这张图。 这么做的好处是什么呢看到代码结构你就能辨别这个app是干嘛的更加模块化代码切换更容易更高级别的抽象功能和层都分离开来了可读性更强以及更易维护的结构更高的内聚更易扩展更少遇到改动无关类或者文件的情况添加或者移除功能要容易很多更多可复用的模块。 我这里并不是说按功能划分就比按层次划分好,只是想让大家看看别的思路。这题没有绝对的答案,但一定说出你在划分时的思考。
4.了解过AOP项目中有用到过么?
AOP面向切面编程与面向对象编程对应。我们都知道面向对象描述的是纵向上的关系,从父到子再到孙。而面向切面解决的是横向的问题,这些问题可以简单地理解为与业务逻辑无关的代码重用问题。大家在自己的项目其实都或多或少的用到过,比如在处理Http, SharedPreferences, Json, Xml, File, Device, System, Log, 格式转换等是,我们提取出来的公共类。 这样做能够使得App整体的结构更清晰合理,避免局部的代码臃肿,方便开发、测试以及后续的维护。