UIView类有太多委托方法给父View Controller?

时间:2016-06-13 22:54:41

标签: ios swift oop model-view-controller delegates

我是一个新手程序员,所以我要求人们就我在他们所处的情况下会做些什么提出意见/建议。

背景

由于图书馆的限制我用来实现弹出"就像窗口一样,我目前正在开发一个UIView类(让我们称之为Menu),它创建UIImagePickers和各种其他视图控制器(VCs)。但是,由于UIView本身仍然存在于它自身产生的任何VC之上,因此我被迫将任何VC创建方法委托给Menu的parentVC,以便我可以忽略Menu视图,创建必要的任何VC,然后(有时)另外恢复Menu视图。

问题

我目前正在为具有Menu视图的任何UIViewController复制并粘贴数百行委托方法。这些委托方法对于每个视图控制器都是相同的,并且存在于那里,因为这些方法具有UIViewController特定功能,例如presentViewController。我很想将parentVC作为参数传递给Menu,以减少重复代码的数量,但这似乎是MVC-unkosher。什么是解决这个问题的好方法?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你可以创建一个扩展名,就像这样

extension SomeClass: ClassesDelegates {
    //some specific code that all Views will use
}

答案 1 :(得分:0)

  

我很想将parentVC作为参数传递给Menu,以减少重复代码的数量,但这似乎是MVC-unkosher。

那是因为MVC是一种过时的建筑选择,导致了这种情况。这就是" Massive View Controller"你可能已经注意到这里和那里的网络来自于。“

您的Menu取决于parentVC。因此,我们将parentVC称为依赖。现代体系结构的一个基本原则是依赖注入,它允许您消除所引用的重复代码,并独立于其依赖项测试Menu。看看

所以,不要害怕使用参数,你的直觉是合理的。拥抱参数的使用,并认为你正在采用一个5美分的概念" 25美元的术语" (参见第一个链接),敏捷设计模式称为 依赖注入 。对于奖励酷点,不要将该参数设为UIViewController。定义仅具有Menu所需访问权限的协议,并使该参数符合所述协议,并为符合该协议的UIViewController添加扩展。这使得其他地方的测试和重用更容更重要的是,您将参与面向协议的编程,它将您置于时尚的Swift设计模式的最前沿。那时没有人会称你为新手。