- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我经常对何时使用数据源模式以及何时使用属性来为对象提供配置信息感到困惑。
我有两种方法可以做到这一点,
通常我会在对象的类中保留很多必须配置的属性,以及一个重置对象并继续使用新属性的方法。
对于配置另一个对象的对象,我保留了一个名为 configureXYZ:WithValues: 的方法,它重置属性并调用要配置的对象的重置方法。
这是我在 MPMoviePlayerController 中看到的,我们必须设置属性。
其他方式是 tableView 的工作方式,所有配置信息都来自数据源方法。
谁能更清楚地说明在哪种情况下首选哪种方式。
因为我常常想使用设计模式并使代码看起来很时尚,但我想知道我们什么时候真正需要这些。我非常清楚委托(delegate)模式并且必须定期使用它。DataSource 是我一直不清楚的一件事。
最佳答案
在设计类时,在决定是使用委托(delegate)还是使用属性时,您应该考虑的关键因素是值更改的频率。如果您只设置一次值并且它们永远不会再更改,那么属性的效果最好。如果值可能随时间变化或因条件而变化,委托(delegate)(其中数据源只是一个示例)的效果最好。
例如,在UITableView
中,行数是高度动态的。它可能由于表格 View 控制之外的许多原因而改变。行甚至代表的是高度动态的。它们可能是数据;它们可能是菜单选项;他们可能是游戏中的棋子。 UITableView
不会尝试猜测或控制其中的任何一个。它将它移动到一个委托(delegate)(数据源),在那里可能会做出非常复杂的决定。
MPMoviePlayerController
有一些控件,这些控件意味着非常具体的事情并且几乎永远不会改变(特别是一旦电影开始播放)。基本上你设置好东西,点击 play
然后走开。在那种情况下,代表可能会矫枉过正。
中间有很多情况,无论哪种方式都可能没问题。我会鼓励开发人员首先考虑委托(delegate),如果没有意义,然后再考虑属性。这并不是因为委派总是正确的答案,而是因为大多数受过 C++ 或 Java 教育的开发人员并不从委派的角度思考问题,因此应该有意识地这样做。
沿着这些思路的一些其他想法:
使用属性时,理想的情况是它们在初始化时配置并且此后不可变。这解决了大量问题。
如果您发现自己需要很多属性,委派可能更好,而且通常更简单。
委托(delegate)通知方法 (somethingDidHappen:
) 通常最好作为 block 来实现。 ( block 在 ObjC 中相对较新。许多基于委托(delegate)的 Apple 界面正在转向 block ,但由于历史原因,您会看到真正的混合。)
“委托(delegate)”和“数据源”之间的区别在于,委托(delegate)管理行为,而数据源提供数据。它们通常以相同的方式实现。
关于objective-c - DataSource 模式与在配置对象时设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352832/
更新:将代码更改为立即调用并分配 dataSource ,但我仍然遇到相同的结果,但 sourceData.paginator 正在运行。 sourceData.filter 和 sourceData
我想以编程方式设置我的数据源的模型。像这样的东西: var ds = new kendo.data.DataSource({ //... }); var mod = kendo.data.Model.
我有一个多模块 maven 项目,我想将它与 一起使用tomcat7 maven插件并开始: mvn tomcat7:run 但我不知道如何配置 jndi 数据源。 我试图放入我的 pom.xml:
任何人都可以提供有关如何执行此操作的说明吗?我设置了几个不同的 JDBC 数据源,并希望能够配置用户使用不同的数据源运行相同的报告。例如。当用户A登录并运行报表A时,使用数据源1;当用户 B 登录并运
过去几周我从这个网站收集了许多有用的答案。我加入是为了对一些我认为最有帮助的答案+1,但目前还无法做到这一点。不过谢谢! 我的问题是 JBoss 7 AS 部署错误,我似乎无法追踪任何相关信息。它开始
我们遇到了一个 problem哪里 我们在一个 MDI 工作区中有两个相同窗口的实例,它们绑定(bind)到两个单独的对象模型。 对象模型覆盖了它们的 .Equals 和 .GetHashCode 方
当我运行我的独立 Web 应用程序时,spring 无法实例化数据源 bean。请注意,我不想在此项目中使用 JPA 或休眠。在这一点上我不知道为什么。我最好的猜测是依赖项或语法问题,但我无法找到解决
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我的项目使用springBoot2,并且不需要连接数据库,但是springboot自动配置数据源并在启动项目时抛出异常。我已经添加了执行,但它不起作用 @SpringBootApplication(e
我指的是下面的链接来设置环回框架并创建简单的 API https://docs.strongloop.com/display/public/LB/Getting+started+with+LoopBa
我在 SPringBoot 中的数据源有问题。我想使用 JDBC 并从数据源获取数据,但出现错误:说明: com.example.My.MyApplication 中的字段 dataSource 需要
这是在我的 spring-servlet.xml 文件中定义的具有此 id 的 bean 这是完整的堆栈跟踪 SEVERE: Exception sending context initialize
我正在尝试使用 Spring、Maven 和 Hibernate 创建一个访问 sql server 数据库的应用程序。当我尝试运行应用程序时出现以下错误: Exception in thread "
当我运行我的网络应用程序时抛出以下错误。 Exception encountered during context initialization - cancelling refresh attemp
我正在研究 Spring Boot JDBC MYSQL 示例。在这个例子中,我使用了 1.3.1.RELEASE spring boot starter 版本,当时我使用了以下 2 spring.d
Feb 20, 2012 6:30:45 AM org.apache.catalina.core.ApplicationContext log INFO: Initializing Spring ro
我引用了网址:https://o7planning.org/en/11727/understanding-spring-cloud-config-client-with-example没有任何自定义,
spring.jpa.hibernate.ddl-auto=update spring.datasource.url=jdbc:mysql://localhost:3306/study?serverT
我有一个多线程作业(同时运行 6 个作业),这些作业使用 3 个数据源(第一个数据源上有 2 个,第二个数据源上有另外 2 个,第三个数据源上有最后 2 个)。 /* *************
我正在尝试实现从CurrencyExchange模块到CurrencyConvert的开放字段调用,但我被这个错误卡住了。有谁能帮帮我吗?我已经检查了其他答案,并试图添加#spring.datasou
我是一名优秀的程序员,十分优秀!