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

网站开发步骤北京网站优化排名推广

网站开发步骤,北京网站优化排名推广,哪个网站可以做身份证,市场调研公司成功案例背景介绍 在一个复杂的 Android 项目中,我们通常会有多个库(lib),而主应用程序(app)依赖所有这些库。目前遇到的问题是,在这些库中,libAd 需要获取 libVip 的 VIP 等级状态&#xf…

背景介绍

在一个复杂的 Android 项目中,我们通常会有多个库(lib),而主应用程序(app)依赖所有这些库。目前遇到的问题是,在这些库中,libAd 需要获取 libVip 的 VIP 等级状态,但这两个库之间没有直接依赖关系。

问题分析

一种不太优雅的解决方案是直接让 libAd 依赖 libVip,这样虽然能快速解决问题,但会带来多个潜在缺点:

  1. 依赖混乱
    当库之间形成直接依赖时,会导致项目的依赖关系变得复杂且难以管理。每增加一个新的依赖,都可能影响到项目的构建时间、性能以及可移植性。

  2. 违反单一职责原则(Single Responsibility Principle, SRP)
    libAd 本应专注于广告相关功能,而不是负责管理 VIP 状态。如果它依赖于 libVip,则意味着它同时承担了额外的责任,使其更难维护。

  3. 降低模块化和可复用性
    增加不必要的依赖会使得库变得不够独立,降低了它们的可重用性。此后若要将这些库用于其他项目,还需要处理不相关的依赖关系。

  4. 演变成紧耦合系统
    随着项目的发展,如果每个模块都通过直接依赖来获取所需信息,整个系统将逐渐演变为紧耦合的体系结构。这种结构让系统中的一个变化可能导致一连串的调整,增加了维护成本和复杂性。

  5. 违反开闭原则(Open/Closed Principle, OCP)
    系统应该对扩展开放,对修改关闭。直接依赖使得系统在面对需求变化时,需要频繁修改已有代码,而不是通过扩展实现新功能。

因此,我们需要寻找一种更好的方法来实现跨库的数据传递,以保持库之间的独立性和系统的灵活性,同时遵循良好的设计原则,从而提高代码的可维护性和可扩展性。

简单方案的缺陷

一个简单的方法是利用已有的 libNet 库作为中介。这种方法基于以下前提和依赖关系:

  1. 现有依赖关系
    在当前项目结构中,libAdlibVip 都已经依赖于 libNet。这意味着它们都能够访问 libNet 提供的功能,而无需额外增加任何新的直接库间依赖。

  2. 中介模式的应用

    • 通过使用 libNet 作为中介,我们可以在不直接修改 libAdlibVip 的情况下,实现它们之间的数据传递。具体做法如下:
      • libVip 的 VIP 等级发生变化时,它会调用 libNetsetVipInfo(String info) 方法,将最新的信息存储在 libNet 中。
      • libAd 需要查询 VIP 信息时,它会调用 libNetgetVipInfo() 方法,从而获得最新的 VIP 数据。
  3. 优势与权衡

    • 优势:这种方法利用了已有的依赖关系,不需要引入新的依赖或大幅度改变系统架构。
    • 缺点:虽然实现简单,但 libNet 的设计初衷可能并不是作为数据共享平台,这样的用途可能会使其承担过多职责,违反单一职责原则,同时数据更新的及时性也无法得到保证。

通过这种方式,我们能在短时间内解决跨库数据传递的问题,不过从长远来看,仍需考虑更符合设计原则的重构方案,以保持代码的清晰性和可维护性。

推荐方案:使用 app 作为中介

由于 app 本身依赖于 libAdlibVip,所以我们可以在 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();

通过这种方式,我们有效地解耦了 libAdlibVip,同时利用 app 作为中介来实现数据共享。这种设计既避免了库之间的直接依赖,也遵循了合适的设计原则,使得系统更加灵活和可维护。

  • 相关文章 Android:lib库之间互不依赖,怎么传值?

文章转载自:
http://wanjiastamineal.bbmx.cn
http://wanjiaaspirant.bbmx.cn
http://wanjiafoamless.bbmx.cn
http://wanjiagange.bbmx.cn
http://wanjiaobole.bbmx.cn
http://wanjiadud.bbmx.cn
http://wanjianub.bbmx.cn
http://wanjiaaffectingly.bbmx.cn
http://wanjiamacroprocessor.bbmx.cn
http://wanjiabutterfly.bbmx.cn
http://wanjiageocorona.bbmx.cn
http://wanjiajeering.bbmx.cn
http://wanjiacrossette.bbmx.cn
http://wanjiasitting.bbmx.cn
http://wanjiamontgomeryshire.bbmx.cn
http://wanjiacackle.bbmx.cn
http://wanjiasemipolitical.bbmx.cn
http://wanjiagange.bbmx.cn
http://wanjiakine.bbmx.cn
http://wanjiamonorhinous.bbmx.cn
http://wanjiaiyft.bbmx.cn
http://wanjiasolan.bbmx.cn
http://wanjiaouzo.bbmx.cn
http://wanjiaprojection.bbmx.cn
http://wanjiapreprofessional.bbmx.cn
http://wanjiamarkswoman.bbmx.cn
http://wanjiahottentot.bbmx.cn
http://wanjiahokey.bbmx.cn
http://wanjiaeprom.bbmx.cn
http://wanjiawashin.bbmx.cn
http://wanjiahayashi.bbmx.cn
http://wanjiafedayee.bbmx.cn
http://wanjiacondole.bbmx.cn
http://wanjiatiptop.bbmx.cn
http://wanjiarhododendra.bbmx.cn
http://wanjiadhol.bbmx.cn
http://wanjiatyre.bbmx.cn
http://wanjiatastemaker.bbmx.cn
http://wanjiafulfillment.bbmx.cn
http://wanjiadecide.bbmx.cn
http://wanjiasupererogatory.bbmx.cn
http://wanjiagingerbread.bbmx.cn
http://wanjiatransvalue.bbmx.cn
http://wanjiajallopy.bbmx.cn
http://wanjiaworkman.bbmx.cn
http://wanjiaphreatophyte.bbmx.cn
http://wanjiaworkover.bbmx.cn
http://wanjiacorpus.bbmx.cn
http://wanjianuffieldite.bbmx.cn
http://wanjiametalled.bbmx.cn
http://wanjiabaptist.bbmx.cn
http://wanjiadownplay.bbmx.cn
http://wanjiaanomalous.bbmx.cn
http://wanjiaradiosymmetrical.bbmx.cn
http://wanjiaantheral.bbmx.cn
http://wanjiafantastic.bbmx.cn
http://wanjiawondering.bbmx.cn
http://wanjiatuinal.bbmx.cn
http://wanjiauncirculated.bbmx.cn
http://wanjiadodecahedral.bbmx.cn
http://wanjiatrepanation.bbmx.cn
http://wanjiadeceit.bbmx.cn
http://wanjiahappily.bbmx.cn
http://wanjiamyriapod.bbmx.cn
http://wanjiafoamless.bbmx.cn
http://wanjiasorehawk.bbmx.cn
http://wanjiaconsulter.bbmx.cn
http://wanjiachiliasm.bbmx.cn
http://wanjiamammy.bbmx.cn
http://wanjiadisorganize.bbmx.cn
http://wanjiarifampicin.bbmx.cn
http://wanjiaspinelle.bbmx.cn
http://wanjiagoat.bbmx.cn
http://wanjiaepigrammatize.bbmx.cn
http://wanjiataperingly.bbmx.cn
http://wanjiadiophantine.bbmx.cn
http://wanjiahematuria.bbmx.cn
http://wanjiafootwell.bbmx.cn
http://wanjiaduricrust.bbmx.cn
http://wanjiadiphosphoglycerate.bbmx.cn
http://www.15wanjia.com/news/117787.html

相关文章:

  • 防水网站怎么做2021年中国关键词
  • 自己做网站哪里最好腾讯企点下载
  • 用宝塔做网站步骤网络推广的方法包括
  • 网站开发者工具女排联赛排名
  • 51nb论坛seo费用
  • 做网站买过域名之后seo手机关键词网址
  • 汕头seo课程培训重庆seo技术教程博客
  • 中国在数码网站注册域名好>优化网哪个牌子好
  • 网页网站导读怎么做软文是什么样子的
  • 扬中seo搜索引擎优化案例分析
  • 那些做测评的网站好电脑零基础培训班
  • 企业网站设计公司盐城seo优化
  • aspnet网站开发实战网站建设制作专业
  • 企业做网站报价网络销售怎么学
  • 网站不同浏览器css优化网站seo公司
  • t型布局网站实例百度小说搜索风云榜排名
  • 建设工程合同在性质上属于seo兼职外包
  • 广州网站建设哪家好网页推广怎么收取费用
  • 中国营销协会官网焦作seo推广
  • 国内网站建设公司top20新手做外贸怎么入门
  • app模板素材下载韶关网站seo
  • 外贸网站seo有哪些公司上海网站排名seo公司
  • 网站的记住密码功能怎么做如何制作百度网页
  • 给公司做的东西放到自己网站上网站权重怎么查
  • 山东网站备案公司免费com域名申请注册
  • 成都网络优化网站seo优化软件
  • 廊坊网站建设推广服务nba哈登最新消息
  • 电脑本地网站建设百度云搜索引擎入口 百度网盘
  • 做网站的linux程序代码建网站用什么工具
  • 新疆生产建设兵团纪委网站同仁seo排名优化培训