当前位置: 首页 > news >正文

深圳网站设计公司排名电子商务网站系统规划

深圳网站设计公司排名,电子商务网站系统规划,梅州建站规划,北京代理记账背景介绍 在一个复杂的 Android 项目中#xff0c;我们通常会有多个库#xff08;lib#xff09;#xff0c;而主应用程序#xff08;app#xff09;依赖所有这些库。目前遇到的问题是#xff0c;在这些库中#xff0c;libAd 需要获取 libVip 的 VIP 等级状态#xf…背景介绍 在一个复杂的 Android 项目中我们通常会有多个库lib而主应用程序app依赖所有这些库。目前遇到的问题是在这些库中libAd 需要获取 libVip 的 VIP 等级状态但这两个库之间没有直接依赖关系。 问题分析 一种不太优雅的解决方案是直接让 libAd 依赖 libVip这样虽然能快速解决问题但会带来多个潜在缺点 依赖混乱 当库之间形成直接依赖时会导致项目的依赖关系变得复杂且难以管理。每增加一个新的依赖都可能影响到项目的构建时间、性能以及可移植性。 违反单一职责原则Single Responsibility Principle, SRP libAd 本应专注于广告相关功能而不是负责管理 VIP 状态。如果它依赖于 libVip则意味着它同时承担了额外的责任使其更难维护。 降低模块化和可复用性 增加不必要的依赖会使得库变得不够独立降低了它们的可重用性。此后若要将这些库用于其他项目还需要处理不相关的依赖关系。 演变成紧耦合系统 随着项目的发展如果每个模块都通过直接依赖来获取所需信息整个系统将逐渐演变为紧耦合的体系结构。这种结构让系统中的一个变化可能导致一连串的调整增加了维护成本和复杂性。 违反开闭原则Open/Closed Principle, OCP 系统应该对扩展开放对修改关闭。直接依赖使得系统在面对需求变化时需要频繁修改已有代码而不是通过扩展实现新功能。 因此我们需要寻找一种更好的方法来实现跨库的数据传递以保持库之间的独立性和系统的灵活性同时遵循良好的设计原则从而提高代码的可维护性和可扩展性。 简单方案的缺陷 一个简单的方法是利用已有的 libNet 库作为中介。这种方法基于以下前提和依赖关系 现有依赖关系 在当前项目结构中libAd 和 libVip 都已经依赖于 libNet。这意味着它们都能够访问 libNet 提供的功能而无需额外增加任何新的直接库间依赖。 中介模式的应用 通过使用 libNet 作为中介我们可以在不直接修改 libAd 和 libVip 的情况下实现它们之间的数据传递。具体做法如下 当 libVip 的 VIP 等级发生变化时它会调用 libNet 的 setVipInfo(String info) 方法将最新的信息存储在 libNet 中。当 libAd 需要查询 VIP 信息时它会调用 libNet 的 getVipInfo() 方法从而获得最新的 VIP 数据。 优势与权衡 优势这种方法利用了已有的依赖关系不需要引入新的依赖或大幅度改变系统架构。缺点虽然实现简单但 libNet 的设计初衷可能并不是作为数据共享平台这样的用途可能会使其承担过多职责违反单一职责原则同时数据更新的及时性也无法得到保证。 通过这种方式我们能在短时间内解决跨库数据传递的问题不过从长远来看仍需考虑更符合设计原则的重构方案以保持代码的清晰性和可维护性。 推荐方案使用 app 作为中介 由于 app 本身依赖于 libAd 和 libVip所以我们可以在 app 层面处理这种数据传递。下面介绍具体实现步骤 1. 为 libAd 添加接口 首先为 libAd 新增一个接口用于同步 libVip 的数据 /*** libAd 同步 libVip 的数据* 如果需要同步其他无依赖关系的库的数据可以继续新增方法*/ public interface LibAdDataListener {/*** return 是否是 Vip*/boolean isVip();/*** return 获取当前 VIP 类型*/String getVipType(); }2. 在 libAd 的管理类中新增方法 在 AdManager 类中添加以下方法用于设置和获取数据监听器 private LibAdDataListener dataListener;public AdManager setSharedDataListener(LibAdDataListener dataListener) {this.dataListener dataListener;return this; }public LibAdDataListener getSharedDataListener() {return dataListener; }3. 在 app 中实现数据监听 在应用的 Application 类的初始化方法中设置 LibAdDataListener 实现 AdManager.getInstance(this).setSharedDataListener(new LibAdDataListener() {Overridepublic boolean isVip() {// TODO: 调用 libVip 数据return false;}Overridepublic String getVipType() {// TODO: 调用 libVip 数据return null;} });4. 在 libAd 中获取信息 当 libAd 需要获取 VIP 信息时可以直接调用 LibAdDataListener listener AdManager.getInstance(context).getSharedDataListener();通过这种方式我们有效地解耦了 libAd 和 libVip同时利用 app 作为中介来实现数据共享。这种设计既避免了库之间的直接依赖也遵循了合适的设计原则使得系统更加灵活和可维护。 相关文章 Androidlib库之间互不依赖怎么传值
http://www.hkea.cn/news/14270368/

相关文章:

  • 仿新浪微博网站代码crm公司
  • html5 门户网站模版成都app开发外包
  • 做网站推广的工作内容深圳设计网站有哪些
  • 网站宣传推广方案win8风格企业网站
  • 亚马逊卖家做自己网站如何用ps做照片模板下载网站
  • 昆明网站建设培训办公电脑租赁平台
  • 怎么做透明的网站图片哪个设计网站做兼职好
  • 南京网站制作链接百度搜索引擎怎么做
  • 湖南长沙益阳网站建设微信开发小程序教程
  • 南昌商城网站建设网站的图片怎么制作
  • 内江市建设教育培训官方网站wordpress定时备份
  • 付费阅读下载网站开发wordpress安装主题之后首页不变
  • 利用微博网站做淘客装修公司免费装修
  • 影视公司网站设计抖音搜索关键词排名查询
  • 有哪些网站有收录做红酒的商行创建博客网站
  • 校园网站建设目标wordpress kan主题
  • 全国p2p网站建设网站开发分类
  • 山东省东营市建设局网站WordPress主题1002无标题
  • 图片网站源码aspwordpress wp();
  • 哪些可以免费做网站什么是ui设计师
  • php网站建设实例外贸网络营销培训
  • 闲鱼上面给人做网站造退款wordpress判断ie6
  • 温州做网站公司有哪些网站怎么设置qq
  • 备案号新增网站建网站 域名
  • 哈尔滨网站搜索优化公司网站怎么自己建设
  • 效果图网站无缝连接wordpress怎么弄主题
  • 企业网站开发服务合同电商网站开发的目的是
  • 网站改版文案包装百度开放平台 wordpress
  • 景区网站建设材料网站批量收录
  • 三亚房产网站开发邯郸做小程序的网络公司