关于Android模块化、低耦合、高扩展性的架构设计
2017-09-04 18:03
387 查看
上个月接到项目重构的任务,让设计一种高扩展性,模块耦合更低的轻量级的架构。于是我根据app的业务和模块划分最终设计出了如下架构,该架构适合模块较多,模块中联系较低的app。根据近一个月的实战验证,确定了该架构的可信性和很高的扩展性、代码复用性,另外该架构使得代码结构更加清晰,更容易维护。该架构符合android组件化、模块化开发的思想。
1、该架构看起来比较重比较繁琐,但是对于团队开发来说却能极大地提升工作效率。
2、次架构分为五层,最下层是通用的工具类和网络框架(通过代理模式封装过的),另外所有的第三方SDK、融云、等都加入到该层被上层依赖。次下层是共同业务处理的module,比如存数据库、文件相关操作等,第三层是各模块间通用的自定义view,例如下拉刷新的listview,以及关联比较紧密的模块(或者在第二层单独成module)。第二层是相对独立的模块,通过分module进行开发能很好控制和维护,极大提升了效率。最上层是整个app的入口层,可以是任何模块,由于业务的原因我们将登陆模块作为了入口。
3、最上层模块通过依次依赖下层的模块来实现功能。
4、模块内部通过MVP进行开发,封装了业务,使得业务代码复用性更高,封装了内部细节,符合面向对象的设计思想。
5、如果有类似业务app可以直接复制module进行依赖。
需要注意的是:因为是团队开发,应该多交流,不要把不共用的全部放在最底层,这样能避免架构被破坏。
当然这个层次结构是种比较理想化的架构,可以根据app做分层删减,比如:
这个相比就把所有模块放在一个module中按包划分,适合与关系紧密的模块。相比而言我更喜欢第一种,因为我们是个团队,都喜欢文件夹少点这样看起来也清爽。
当然你还可以删减:
不管怎么删减,这种设计适合mvp设计模式,你们喜欢的可以试试,每个module之间通过依赖联系。
当然我们公司最终还是选择了第一种,你们觉得这样设计是合理还是麻烦呢?
相关问题,如何解决下层activity调用,同级activity和上层activtiy?如下通过接口回调,BaseActivity分发接口对象到所有activtiy中,接口对象通过调用MainActivity进行启动其他activity。
入口act中初始化接口对象
库中回调接口,邮件模块
其中
下载代码:http://download.csdn.net/download/chen364567628/9996388
1、该架构看起来比较重比较繁琐,但是对于团队开发来说却能极大地提升工作效率。
2、次架构分为五层,最下层是通用的工具类和网络框架(通过代理模式封装过的),另外所有的第三方SDK、融云、等都加入到该层被上层依赖。次下层是共同业务处理的module,比如存数据库、文件相关操作等,第三层是各模块间通用的自定义view,例如下拉刷新的listview,以及关联比较紧密的模块(或者在第二层单独成module)。第二层是相对独立的模块,通过分module进行开发能很好控制和维护,极大提升了效率。最上层是整个app的入口层,可以是任何模块,由于业务的原因我们将登陆模块作为了入口。
3、最上层模块通过依次依赖下层的模块来实现功能。
4、模块内部通过MVP进行开发,封装了业务,使得业务代码复用性更高,封装了内部细节,符合面向对象的设计思想。
5、如果有类似业务app可以直接复制module进行依赖。
需要注意的是:因为是团队开发,应该多交流,不要把不共用的全部放在最底层,这样能避免架构被破坏。
当然这个层次结构是种比较理想化的架构,可以根据app做分层删减,比如:
这个相比就把所有模块放在一个module中按包划分,适合与关系紧密的模块。相比而言我更喜欢第一种,因为我们是个团队,都喜欢文件夹少点这样看起来也清爽。
当然你还可以删减:
不管怎么删减,这种设计适合mvp设计模式,你们喜欢的可以试试,每个module之间通过依赖联系。
当然我们公司最终还是选择了第一种,你们觉得这样设计是合理还是麻烦呢?
相关问题,如何解决下层activity调用,同级activity和上层activtiy?如下通过接口回调,BaseActivity分发接口对象到所有activtiy中,接口对象通过调用MainActivity进行启动其他activity。
入口act中初始化接口对象
public class MainActivity extends BaseActivity implements StartContact { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startContact = this; Button tomail = (Button) findViewById(R.id.tomail); tomail.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, MailActivity.class); startActivity(intent); } }); } @Override public void startContact(Activity activity,int requestCode) { activity.startActivityForResult(new Intent(activity,ContactActivity.class),requestCode); } @Override public void startMail(Activity activity, int resultCode, String str) { Intent intent = new Intent(); intent.putExtra("select",str); activity.setResult(resultCode,intent); activity.finish(); } }
库中回调接口,邮件模块
public class MailActivity extends BaseActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mail); tv = (TextView) findViewById(R.id.setGetDate); Button selectContact = (Button) findViewById(R.id.selectContact); selectContact.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startContact.startContact(MailActivity.this,100); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.e("cs","sdwetertre"); if (requestCode==100 && resultCode==101 && data!=null){ String select = data.getStringExtra("select"); if (!TextUtils.isEmpty(select.trim())) { tv.setText(select); } } } }联系人模块,
public class ContactActivity extends BaseActivity { public String str=""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_contact); Button complete = (Button) findViewById(R.id.complete); complete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startContact.startMail(ContactActivity.this,101,str); } }); RadioGroup rg = (RadioGroup) findViewById(R.id.rg); rg.check(0); rg.check(R.id.rb1); str = "Mekhi"; rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) { if (checkedId==R.id.rb1) { str = "Mekhi"; }else if (checkedId==R.id.rb2) { str = "chen"; }else if (checkedId==R.id.rb3) { str = "男"; }else if (checkedId==R.id.rb4){ str = "女"; } } }); } }baseAct
public class BaseActivity extends Activity { public static StartContact startContact; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(saved 4000 InstanceState); setContentView(R.layout.activity_base); } }
其中
BaseActivity 负责分发startContact接口对象,使之形成回调对象,MainActivity 负责初始化接口对象。
下载代码:http://download.csdn.net/download/chen364567628/9996388
相关文章推荐
- Android架构设计---关于MVVM模式的探讨
- Android架构设计---关于MVVM模式的探讨
- Android架构设计---关于MVVM模式的探讨
- Android架构设计之模块化
- Android架构设计---关于View边界划分的思考
- 关于Android App整体架构的设计
- 创建模块化游戏(Creating Moddable Games with XML and Scripting Part I)代码阅读,关于整体架构!
- 创建模块化游戏(Creating Moddable Games with XML and Scripting Part I)代码阅读,关于整体架构!
- 关于J2EE层次设计架构实例的分析详解
- 关于软件的架构设计
- 资料收集:高并发 高性能 高扩展性 Web 2.0 站点架构设计及优化策略
- 对话:关于架构、设计与需求
- 关于软件的架构设计
- 对话:关于架构、设计与需求
- 资料收集:高并发 高性能 高扩展性 Web 2.0 站点架构设计及优化策略
- 对话:关于架构、设计与需求
- 关于软件的架构设计
- 整理几个关于设计模式、架构的博客专栏和文章
- 对话:关于架构、设计与需求
- 关于可扩展的web架构设计的探索-框架结构的描述文件