首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

安卓开发中的Model-View-Presenter(MVP模式)

对于层之间的通信,在经典的MVP案例中,我们发现它是通过回调完成的(这将最终把我们的应用程序变成回调地狱),而在MVVM LiveData中使用,虽然它允许我们避免回调,但它没有为我们提供大量的操作符来操作数据...纯MVP和无controller架构(Pure Model-View-Presenter or Controlerless Architecture) 在我们的例子中,我们选择了一个叫做纯MVP的体系结构...View 在Android中,我们的视图的实现将对应于一个活动或一个片段(在示例/项目中是片段),但它可以是一个ViewModel,甚至是一个可视化组件。...这里不讨论视图是由N个片段组成的活动的情况,因为每个片段都有M个演示者,我们可以假设视图是这些片段中的每一个,尽管它们随后被分组到一个片段中(甚至在另一个片段中)。...为了能够在视图和服务组件之前应用“演示者优先”设计,定义这两个接口,例如方法和事件 测试 在为我们的应用程序编写测试时,重要的是我们可以测试独立的代码单元,这些代码单元在应用程序的其他部分没有副作用,它们的依赖关系可以被模仿

1.6K30

Jetpack Hilt 依赖注入框架上手指南

@Inject 使用 @Inject 来告诉 Hilt 如何提供该类的实例,常用于构造方法,非私有字段,方法中。...@Provides 常用于被 @Module 注解标记类的内部方法上。并提供依赖项对象。...使用 @Binds 进行接口注入 Binds:必须注释一个抽象函数,抽象函数的返回值是实现的接口。通过添加具有接口实现类型的唯一参数来指定实现。...查找了一些资料: 主要问题之一是,通过在 Hilt 中发现模块的方式,无法区分哪些模块属于应用中的组件(如果他们确实使用过 Hilt) 已经库或其他库中的组件 另一个问题是,他将预先构建的组件层次结构变得复杂和混乱...同样,如果一个仅包含片段库并托管在应用程序的活动中,那可能会遇到类似的情况,您希望库片段是独立的,单让 FragmentComponent 对象作为 ActivityComponent 并没有意义。

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    上手指南 | Jetpack Hilt 依赖注入框架

    @Inject 使用 @Inject 来告诉 Hilt 如何提供该类的实例,常用于构造方法,非私有字段,方法中。...@Provides 常用于被 @Module 注解标记类的内部方法上。并提供依赖项对象。...---- 使用 @Binds 进行接口注入 Binds:必须注释一个抽象函数,抽象函数的返回值是实现的接口。通过添加具有接口实现类型的唯一参数来指定实现。...查找了一些资料: 主要问题之一是,通过在 Hilt 中发现模块的方式,无法区分哪些模块属于应用中的组件(如果他们确实使用过 Hilt) 已经库或其他库中的组件 另一个问题是,他将预先构建的组件层次结构变得复杂和混乱...同样,如果一个仅包含片段库并托管在应用程序的活动中,那可能会遇到类似的情况,您希望库片段是独立的,单让 FragmentComponent 对象作为 ActivityComponent 并没有意义。

    1.6K30

    Hilt-依赖注入框架上手指南

    netDataSource = NetDataSource() } } 这样用没有什么问题,我们大多数时候都是这样干的,当然在kt中也可以使用 by lazy,不过具体看你自己的场景了。...注意:在Kotlin中,仅包含@Provides函数的模块可以是object类。这样,提供程序就可以得到优化,并且几乎可以内联在生成的代码中。...使用@Provides告诉Hilt如何获得具体实例 用来告诉Hilt 如何提供不能被构造函数注入的类型 每当 Hilt 需要提供该类型的实例时,将执行带注释的函数的函数主体。...由于我们具有AppDatabase传递依赖关系,因此我们还需要告诉Hilt如何提供该类型的实例。...Binds的作用就在于此。 需要注意以下使用条件: Binds 必须注释一个抽象函数,抽象函数的返回值是我们为其提供实现的接口。通过添加具有接口实现类型的唯一参数来指定实现。

    1.7K10

    上手指南 | Jetpack Hilt 依赖注入框架

    @Inject 使用 @Inject 来告诉 Hilt 如何提供该类的实例,常用于构造方法,非私有字段,方法中。...@Provides 常用于被 @Module 注解标记类的内部方法上。并提供依赖项对象。...使用 @Binds 进行接口注入 Binds:必须注释一个抽象函数,抽象函数的返回值是实现的接口。通过添加具有接口实现类型的唯一参数来指定实现。...查找了一些资料: 主要问题之一是,通过在 Hilt 中发现模块的方式,无法区分哪些模块属于应用中的组件(如果他们确实使用过 Hilt) 已经库或其他库中的组件 另一个问题是,他将预先构建的组件层次结构变得复杂和混乱...同样,如果一个仅包含片段库并托管在应用程序的活动中,那可能会遇到类似的情况,您希望库片段是独立的,单让 FragmentComponent 对象作为 ActivityComponent 并没有意义。

    1.8K20

    媲美 ImageNet 的动作识别数据集,你知道哪些?

    我们需要怎么做才能根据这些视频中动作对视频片段进行分类? 我们需要识别视频片段的不同动作,这些动作可能在整个视频持续时间内进行,也可能没有。...一个好的动作识别问题数据集应具有与 ImageNet 相媲美的帧数和动作类型的多样性,以便将经过训练的体系结构概括为许多不同的任务。 幸运的是,去年提出了几个这样的数据集。让我们来看看。 ?...Kinetics-600 中的每个片段均取自的YouTube 视频,持续约 10 秒,并标有单个类。片段已经经历了多轮的人为注释,为标记任务构建了单页 Web 应用程序,您可以看到下面的标签界面。...标签界面 从图像中可以看出,注释过程非常简单:如果场景中发生动作,则向工作人员显示视频动词对,并被要求按"是"或"否"键响应。...请注意,即使此数据集的论文于 2017 年 12 月发布,该数据集仍无法下载,希望之后能够提供下载。 VLOG 视频数量:11400 年份:2017 ?

    2K20

    Shield:支撑美团点评品类最丰富业务的移动端模块化框架开源了

    而视图管理器(CellManager)则负责将模块所提供的视图片段(SectionCellInterface)有序地添加到页面中,并在适当的时候对这些视图进行更新。 ?...模块通信 在某些场景下,页面中的一些视图片段会根据用户操作发生一些联动。而当这些视图片段处于不同的模块中时,这些模块就需要进行通信。...在这种情况下,如果让模块与模块直接进行交互,就无法避免模块之间的耦合,这样既无法保证模块的独立性,也影响可复用性。...下图便是美团点评开发的页面模块配置后台: ? 多端统一 我们通过提供多端统一的模块化框架,减少开发者在不同平台的视觉实现差异上耗费的精力,从而将精力集中于如何实现具体的视图片段。...Shield框架针对Native开发中常见的画分隔线、loading动画等一系列场景做了抽象,为模块提供了丰富的定制化功能,简化了App开发过程中占比较高的视图开发工作。

    1.6K90

    一个 android 的框架

    可以看到项目采用的 MVP 架构(http://xuyushi.github.io/2016/02/28/MVP/) 与常规的 MVP 不同的是,在 modle 层和 view 层通过EventBus...举个例子,退出登录用在这样的情形就很合适,在退出登录后,我们可能不止一个 view 会发生变化,如果把这些写在每一个 Presenter 中无疑是很不简洁的代码 在 modle 层中,抽象出了一个 DataManger...,我们无法修改源码的构造方法,所以使用 Module 来提供注入构造 所以再回来看DataManager的构造方法 @Inject public DataManager(RibotsService...,当注入了DataManager时,在module中找不到对应的 provide 方法,变会在构造方法中寻找,在递归的找参数中的注入… 以下用一张图来概括 ?...方法中,我们通过retrofit 获得网络的数据,再用 DB 存储,再把结果用Observable的结构返回给 P层,在这个例子中是在一个 service 中调用这个方法 MVP 关于 MVP 这一块,

    84680

    数据库技术试题

    T0锁住的数据项,则系统的工作状态处于( ) A 并发处理 B 封锁 C 循环 D 死锁 11.在分布式数据库中,若存取数据时只需指出片段名称...,不必指出片段地址,则称系统具有( ) A 片段透明性 B 地址透明性 C 局部映象透明性 D 异地透明性 12.某学校规定...2.在层次数据库中,交片段和子片段之间只能具有_________类型的联系。 3.封锁对象的大小称为_________。...4.如果一个汽车销售公司,经营摩托车,小汽车、货车和客车,那么在该公司的E-R模型设计中,应该采用_________方法。...9.在安装MS SQL Server时,必须选择一种安全类型。如果在登录时,需要记录用户名和登录ID,则该安全类型是_________。

    86840

    无服务器体系结构简介

    [图片] 无论是在本地构建还是一种由厂商来提供的服务,数据中心都是云计算的第一步。它对物理主机环境进行了抽象,接着我们可以用硬件单元来扩展这些环境。...随着虚拟化的发展,我们开始在云环境中托管虚拟机,一般是将硬件抽象化并使用操作系统作为扩展单元。很快,我们为云建立了托管环境,并对操作系统进行抽象化的处理。...如果数据中心是在本地,则意味着我们要对本地所发生的所有事件负责。而如果将数据中心转移到云端,云计算的每一步发展都会使得我们的工作量大大减少。...无服务器架构 函数是用于抽象语言运行时无服务器体系结构中的扩展单元。在本文中不讨论运行一个函数需要多少CPU,RAM或者其他的资源,而是讨论运行该函数所耗费的时间。在此过程中不应该受到其他指标的影响。...总结 无服务器体系结构可以帮助使用者构建出有用的代码片段,这些片段能够快速运行而不必消耗大量的服务器资源。但这并不意味着FaaS只能在小场景中使用。

    2.2K90

    如何使用MVP+Dagger2+RxJava+Retrofit开发(1)

    概述 在2016年5,6月份开始在知乎上看到开发方法,那时候记得是看mvc,mvp,mvvm这三种开发模式区别,后面进一步了解到google在github上开源了使用这3种模式进行Android开发的demo...在构造类的实例的时候,就知道从哪里去找到需要的依赖 Provide--在modules中,我们定义的方法是用这个注解,以此来告诉Dagger我们想要构造对象并提供这些依赖。...} 创建处理器(MVP中的P) 1.新建MineContract,view与presenter的抽象接口集合,相当于讲下要去做那些事情 public interface MineContract {...总结 创建module,一般应用于第三方包对象或者应用对象 创建Component,依赖注入器,复杂把注入对象注入到注解成员变量 构造方法注入:在类的构造方法前面注释@Inject 成员变量注入:...在类的成员变量(非私有)前面注释@Inject 开始注入调用注射器的Inject方法 详解Dagger2 Android官方MVP架构示例项目解析 dagger2 让你爱不释手

    1.6K80

    唯一可行的 iOS 架构

    没有人可以为您提供具有一定数量的类的灵丹妙药解决方案,因为没人知道您的问题,应用程序的业务逻辑,域模型详细信息和主要目标。您应该自己设计应用程序。...这意味着 MVC 不是我们的选择。如果您说自己不使用 MVC,然而事实并非如此!我们使用了 MVC,并且在 iOS 中不能使用任何替代方法。...在 iOS 中,MVP 方案实际上如下所示: ? 我们真的需要这个新类吗?这看起来很奇怪,因为我们只是创建了具有完全相同角色的 UIViewController 的副本。...同样,不要与 iOS SDK 对抗,我们无法将 UIViewController 转换为 View。即使可以,也没有必要。 VIPER 还记得我说过 MVP 是最奇怪的吗?不,VIPER 才是。...但是实际上,您的“架构”有多少个字母并不重要。如果您仅将应用程序体系结构视为具有确切类的“模式”,则无论如何都会失败。

    1.3K20

    【论文解读】用于代码处理的语言模型综述

    该任务从数值计算中抽象出了推理过程,因此对评估LLM具有特别的意义。2.1.2 Code-to-Code Code-to-Code的任务以代码作为输入,并输出代码。...GraphCodeBERT和SynCoBERT都从源代码提取图(数据流图和抽象语法树)和训练模型预测节点之间的类型关系,而SynCoBERT和Code-MVP也添加类型推理的预训练阶段标记的形式。...另一个共同的目标是对比学习: SynCoBERT和Code-mvp在输入的不同视图(如代码、注释、AST和转换代码)之间的对比,而DISCO通过混淆等语义保留转换构建正样本对,通过注入人工bug构建负样本对...除了减轻了抽象推理任务中的数值计算负担外,解释器还提供了关于代码生成过程本身的反馈,以及单元测试。...许多针对此类应用程序的开源框架已经发布,包括LangChain、AutoGPT和WorkGPT。这些框架为开发人员提供了语言模型的抽象,并且正在积极地革新软件开发的整个过程,即使这个研究正在完成中。

    47910

    干货 | 分段的人脸检测在移动段的应用

    基于面部部件的人脸检测方法,特别是Druid方法,在两组移动人脸数据的精确召回率和ROC曲线方面均优于其他最先进的人脸检测方法,对遮挡具有良好的鲁棒性。 ?...2)召回上限:如果以较高的召回率换取速度,则可以使用较弱的候选生成器,从而产生较少的候选。但是,在这种情况下,检测器受候选生成器性能的约束,无法在候选生成器不返回任何结果的图像中检测人脸。...此外,Druid的训练并不是在类似于基于候选的方法的移动人脸数据集上进行的,但由于其独特的体系结构和数据增强方案,它的性能明显优于其他方法。...然后,在svm学习阶段,将每个聚类中所有人脸片段集合的第一个子集看作是候选的人脸。考虑一下在图像中检测到的第k段。 ? 人脸候选的边框是最小的边框,其中包含来自候选中所有面部分段的所有估计人脸。...此外,在实验上,我们发现某些特定的面部片段比其他的更有可能返回人脸,而一些片段提供了比其他集合更精确的边界框,具有更大的一致性。

    56620

    自动化测试:如何构建Selenium框架

    而且TestNG继承了JUnit提供的所有好处。 TestNG消除了旧框架的大多数限制,使您能够编写更灵活、更强大的测试。一些突出的特性是:简单的注释、分组、排序和参数化。...下面的代码片段显示了两个TestNG测试的示例。由于@BeforeClass和@AfterClass注释,这两个测试共享相同的setUp()和teardown()方法。...使用TestNG,您还可以使用代码片段中演示的@Test注释将一个测试类中的测试分组到子组中。 03 设计框架架构 现在,是时候看看我们的框架架构了。...在下面的代码片段中,您将看到DriverManager是一个抽象类,指示它的实现比如ChromeDriverManager, FirefoxDriverManager和EdgeDriverManager...下面的ChromeDriverManager实现了上面代码片段中定义的DriverManager抽象类。

    1.7K30

    KG4Py:Python代码知识图谱和语义搜索的工具包

    传统的代码搜索主要基于关键词,无法挖掘搜索语句的深层语义信息。目前,在GitHub上搜索代码片段仅限于关键字搜索,这是基于用户能够预测他们正在查找的代码片段相关的关键字来完成的。...但是,这种方法的可移植性和可解释性较差,无法对代码片段进行语义搜索。出于这些原因,我们尝试引入知识图谱来解决代码语义搜索中面临的各种挑战。...受这些知识图谱的启发,研究人员思考了如何在软件工程中构建知识图谱。代码的大数据为知识图谱构建提供了数据源,基于深度学习的方法为自动知识图谱构建(Wang等人,2020a)提供了帮助。...但是,代码的许多语义很难理解和提取。如果只有AST,就不可能重新输出原始源代码。像JPEG一样,AST是有损的,它无法捕获我们留下的注释信息。...对于软件公司,我们的工具包可用于通过理解函数注释的语义来查找企业代码库中的类似代码片段,并推荐给开发人员(如果存在)。这样,不仅减少了开发人员工作的重复,而且降低了软件公司的开发成本。

    2.2K30

    聊一聊SLAP:单一抽象层级原则

    但是行数限定也有问题 没有具体的行数限定 行数限定如果执行,可能会比较死板 显然除了行数之外,我们需要一个更加明确无争议的避免长方法产生的方法,比如今天我们提到的 SLAP(单一抽象层原则)。...举一个最简单的例子,在中学时期我们学习英语,大概听过一个这样类似的短句”美小圆旧黄法国木书房”,这是为了辅助在英语中快速排列定语顺序的记忆技巧总结。...在英语(或其他语言)中 对名词主体增加定语(名词,形容词)修饰,使得主体更加具体 反之对主体删除定语(名词,形容词),会使得主体更加抽象 比如我们对“美小圆旧黄法国木书房” 逐步删除定语,大致会产生这样的抽象层...上面代码存在的问题是 validateUser 方法中暴露了校验email和密码的具体实现 validateUser 应该只关心校验email和密码的抽象(第一层抽象),而不是具体实现(第二层抽象)...SLAP的代码场景和情况 注释或空行分割的方法体 //注释1 代码片段1 //注释2 代码片段2 //注释3 //代码片段3 上面的代码 注释或空行分割的代码片段处理相对独立逻辑,可以抽象成独立的方法

    2K10

    KG4Py:Python代码知识图谱和语义搜索的工具包

    传统的代码搜索主要基于关键词,无法挖掘搜索语句的深层语义信息。目前,在GitHub上搜索代码片段仅限于关键字搜索,这是基于用户能够预测他们正在查找的代码片段相关的关键字来完成的。...但是,这种方法的可移植性和可解释性较差,无法对代码片段进行语义搜索。出于这些原因,我们尝试引入知识图谱来解决代码语义搜索中面临的各种挑战。...受这些知识图谱的启发,研究人员思考了如何在软件工程中构建知识图谱。代码的大数据为知识图谱构建提供了数据源,基于深度学习的方法为自动知识图谱构建(Wang等人,2020a)提供了帮助。...但是,代码的许多语义很难理解和提取。如果只有AST,就不可能重新输出原始源代码。像JPEG一样,AST是有损的,它无法捕获我们留下的注释信息。...对于软件公司,我们的工具包可用于通过理解函数注释的语义来查找企业代码库中的类似代码片段,并推荐给开发人员(如果存在)。这样,不仅减少了开发人员工作的重复,而且降低了软件公司的开发成本。

    2.3K40

    了解什么是微前端

    原因是如果您正在使用 React 库进行开发,并且如果您有两个团队,则两个团队都应该使用相同的React 库,并且两个团队应该在部署时保持同步,并且在代码合并期间始终会发生冲突。...它们没有完全分离,很可能它们维护着相同的仓库并具有相同的构建系统。单体应用的退出被标志为微服务的出现。但是它适用于后端!? 什么是微服务?...在更详细地概述了体系结构后,我将尝试提供一些体系结构的洞察,该体系结构确认了上述提议并允许更灵活的方式。在深入了解细节之前,我需要建立一些术语。...但是,如果每个微应用能够在服务器端呈现其内容,那么拼接层将仅负责连接服务器端的HTML片段。 与传统环境集成至关重要! 但是怎么样?...拼接层解决了服务器端的问题,但没有解决客户端问题。在客户端,在将已粘贴的片段作为无缝HTML加载后,我们不需要每次在URL更改时加载所有部分。因此,我们必须有一些异步加载片段的机制。

    96820
    领券