盈科律师到底得罪了哪个人?管理

这几日,上海盈科(柏林)张晴律师因为爱人圈、微博炫富,引来口诛笔伐,通过自媒体传播,大V转载,主流媒体报纸发布,似乎一夜之间成了众矢之的。但炫富本身是道德问题,确与当下主流历史观相悖而驰,近期之局面,恐是那位文弱女生张晴律师始料未及。于是有人说,中国有两种律师:一种是中华律师;另一种是盈科律师。

只要你跟自己一样,工作了一年半,相信你也经历过多少个大版本的迭代开发,甚至具备多少个应用的支出经历。那么在落成过那么多复杂的事情逻辑之后,你认为,利用纯代码,如何去创设一个美、优、简以及便于管理的为主框架呢?
那二日在揣摩那些题材,于是有了以下想法(可能还不是很成熟,假若你有更好的想法,请评论告知自己,在此提前感谢)。

自己就想问,盈科律师到底得罪了什么人?

撸撸思路

后天以搭建一个连串的宗旨框架为例,来钻探这一个题目,最后的成效图如下:

管理 1

显示效果

世家可以看来,那着实是一个复杂项目标基本功,尽管逻辑再复杂的界面,最开端也都是从这一个界面起步的,而对此它,我们须要做的:

  • 最先化几个子控制器
  • 添加自定义的 TabBarView
  • 添加自定义的 NavigationBar
  • 添加自定的 TopBarColumnView

今天与伙伴互换,谈到实习,找工作的话题,她说,她的敌人事先在盈科实习,都不情愿在简历上写上盈科实习的阅历,我问她那是怎么?她说,近几年盈科声誉不佳,害怕因为那段经历,律所不用他。我默然了。我默然不是本人认同他们的说教,而是我在动脑筋:近几年,盈科到底做了何等,让外界对其评价在下跌?

准备工作

那边关键是准备一些档次开支要求的资源和拉长一些亟待动用到的第三方库,进程不难、琐碎:

  • 导入需求利用到的总体图片资源
  • 导入须要运用到的第三方: Rx斯维夫特、RxCocoa
  • 结缘 UIStoryBoard
    初步化几个控制器,并在每个控制器上添加开首化显示图片

完结上述操作之后,可得项目协会如下:

目录名称 功能介绍
Main 项目的主要入口
Main – MenuViewController 菜单控制器,作用与 TabBarController 相同
Business 存储所有的业务逻辑模块
Business – Home 首页业务模块
Business – Medium 书影音 业务模块
Business – Broadcast 广播 业务模块
Business – Group 小组 业务模块
Business – Profile 我的 业务模块
Utility 存储所有的功能模块
Utility – Extension 存储所有功能类的功能扩展

本来,大家以为无聊就径直跳过这一个操作,在 github 上
https://github.com/iJudson/RxBasicInterface.git
<早期准备> 该 commit 上直接获得这一步的代码

让人惊叹,盈科这几年扩充得厉害。通过官网精通,停止到前年四月6日,盈科律师事务所大陆地域执业律师总人数已经完毕5075人,分所增至42家。因为规模的极速伸张,大不列颠及英格兰联合王国名高天下法律杂志《The
lawyer》公布了“2017亚太地区100强律所”榜单,盈科律师事务所再度无冕亚太地区规模最大的律师事务所。看完那段话,你会不会想起这几天比较熟习的光景:

正题

得了了拥有的预备干活,接下去进入正题:使用 Rx斯维夫特 成立 TabBarView
供菜单控制器 MenuViewController 使用

盈科张晴律师面试美签,面试官问她,律师?她答:律师,亚太第一大律师事务所的联有名气的人。

TabBarView 的创建

事实上对于某些 View
的使用,即便是投机创设的,往往会在过了一段较长的年华过后,再去采纳那张
View 时,竟然发现未能入手,须要再反复下代码,更加是对此这么些专门复杂的
View,有多个方便构造函数,或者更加多的子控件,而且亟需依据不相同情况去选用其中的某些控件…
还有一种状态,
你在店堂与其外人协同工作时,会不会发觉要去选用到她创造的较为复杂的 View
时,须要或局地岁月,感到越发烦啊?
针对那四个问题,我的化解方案是:

<创立该 View 专属的样式类>
在此地,你可以先去跟你的同事或跟自己约定一套创制 View
的风格,就是在创建该 View 的时候先去成立该 View 的直属样式类:用于管理该
View 的具备样式:颜色、子控件类型和数码、子控件的突显地方…
俺们想创设 TabBarView,让我们先来创建 TabBarView 的体裁管理类:

typealias TabBarItemElement = (normalImage: UIImage?, selectedImage: UIImage?, title: String?)

// TabBarView 的样式管理类
struct TabBarStyle {
    //  子控件的元素集合   
    var itemElements: [TabBarItemElement]
     //  TabBarView 的颜色主题(默认为白色)   
    var themeColor: UIColor = UIColor.white
    //  是否含有顶部分割线   
    var hasTopLine: Bool = true
    // 在初始化构造器中,只去初始化必要的元素,避免初始化构造器过于冗长
    init(elements: [TabBarItemElement] = []) {
        self.itemElements = elements
    }
}

<创建 TabBarView>
有了地点的体裁管理类,我们在该 View
中,对外的习性就更加少,基本就唯有八个,那也大程度的增强了该 View
的封装性。
1. 定义对外的体制属性:

// 主题样式
var themeStyle: TabBarStyle = TabBarStyle() {
    didSet {
        // 通过属性监视器,外部可以通过该属性更新 TabBarView 的整体样式
        update(ThemeStyle: themeStyle)
    }
}

2. 创制便利构造函数:便于外部对此类的利用

convenience init(frame: CGRect? = nil, themeStyle: TabBarStyle) {
    // 当外部不传入 Frame 值时,我们默认使用以下 Frame 值
    let barFrame = frame ?? CGRect(x: 0, y: screenHeight - tabBarHeight, width: screenWidth, height: tabBarHeight)
    self.init(frame: barFrame)
    // 设置背景颜色
    self.backgroundColor = themeStyle.themeColor
    // 根据样式管理类,更新该 view 的主体样式
    update(ThemeStyle: themeStyle)
    // 根据样式管理类,决定是否添加顶部分割线
    add(TopLine: themeStyle.hasTopLine)
}

OK,到此地那些 View
大体上就成立已毕了。是还是不是很简短,日后是或不是也很便于管理?近年来来看,这个View 唯有一个对外属性,还有一个 convenience
构造函数,确实很有利我们管理,而对此样式,大家只须要去查看样式管理类,就唯有那一个View 的有着的样式…
嘿,其实接下去,仍旧有些细节要三番五次完善。

3. 落成样式更新的办法
在里头,大家只须求获得表面传进来的体裁属性,去立异样式。
因为那边的 TabBarItem
既有图片,又有题目,所有外部须要将那七个属性都传进来。

fileprivate func update(ThemeStyle style: TabBarStyle) {
    // 所有的样式元素数量
    let itemCount = style.itemElements.count
    let itemWidth = screenWidth/itemCount
    var commonItemFrame = CGRect(x: 0, y: 0, width: itemWidth, height: tabBarHeight)
    // 通过 for 循环,将拿到的所有元素遍历添加到 TabBarView 上
    for (index, element) in style.itemElements.enumerated() {
        commonItemFrame.origin.x = index * itemWidth
        let commonTabBarIem = CommonItemView(frame: commonItemFrame, image: element.normalImage, title: element.title)
        commonTabBarIem.setImage(element.selectedImage, for: .selected)
        commonTabBarIem.alignmentStyle = .upImageDownText(space: 2)
        commonTabBarIem.tag = index
        commonTabBarIem.titleLabel?.font = UIFont.systemFont(ofSize: 12)
        commonTabBarIem.setTitleColor(UIColor.gray, for: .normal)
        commonTabBarIem.setTitleColor(UIColor.black, for: .selected)

        self.addSubview(commonTabBarIem)
        // 这里我们添加监听者,监听每一个 Item 的点击操作,当 item 被点击时,我们通过 Driver 序列,发送点击事情到这和序列上
        let selectedIndex = commonTabBarIem.rx.controlEvent(.touchDown).throttle(0.5, scheduler: MainScheduler.instance).flatMapLatest { (_) -> Driver<Int> in
            return Driver<Int>.just(commonTabBarIem.tag)
            }.asDriver(onErrorJustReturn: 0)
        // 对外监听属性的集合 
        selectedIndexes.append(selectedIndex)

        // 默认选中第一个 tabBarItem
        commonTabBarIem.isSelected = (index == 0 ? true : false)
    }
}

在地点方法中,我们应该有留意到,大家须求一个对外监听属性的汇集,监听用户的点击操作,因为一般
TabBar 有5个 Item,故而那一个集合一般都有三个对外监听属性,属性定义如下:

 //当前选中的 index
 var selectedIndexes: [Driver<Int>] = []

4. 添加顶部分割线

 fileprivate func add(TopLine isExisting: Bool) {
    // 事先判断是否需要添加分割线,如果不需要,可直接 return 返回
    guard isExisting else {
        return
    }

    let lineHeight: CGFloat = 0.5
    let topLine = UIView(frame: CGRect(x: 0, y: -lineHeight, width: screenWidth, height: lineHeight))
    topLine.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3)
    self.addSubview(topLine)
 }

到这一步的代码,大家可以在
https://github.com/iJudson/RxBasicInterface
<创建 TabBarView> 当前 commit 上获取(注意,现在在那几个 commit
上运行程序,仍然尚未其它功用,毕竟还尚无动用到该 TabBarView)

律所发展亟需人,本身无可厚非,但极速扩充带来的最举世瞩目标坏处是,律师管理很难把控。

TabBarView 在 MenuViewController 的使用

TabBarView 是在 MenuViewController 去选择的, 在 MenuViewController
中也亟需去监听 TabBarView 的 selectedIndexes 数组属性,从而监听到
TabBarView 上的点击操作。而其实,TabBarView 的利用,由于采纳了 RxSwift,也变得专程简单,也方便管理。
1. 大家在 viewDidLoad 添加四个法子

  • 先导化 MenuViewController
    中享有的子控制器,并默许让首页控制器展现在主页上
  • 配置底部 TabBarView ,创制所需样式管理类
    TabBarViewStyle,并添加所需元素

 override func viewDidLoad() {
    super.viewDidLoad()

    initializeTopViewControllers()

    configureTabBar()
 }

接下去,我们只必要定义并健全上述三个方法…

2. 初始化所有的子控制器

 fileprivate func initializeTopViewControllers() {
     // 通过 UIStoryboard 拿到所有的子导航控制器
    let homeNav = UIStoryboard.NavigationController.home
    let mediumNav = UIStoryboard.NavigationController.medium
    let broadcastNav = UIStoryboard.NavigationController.broadcast
    let groupNav = UIStoryboard.NavigationController.group
    let profileNav = UIStoryboard.NavigationController.profile
    // 并预先添加到 topViewControllers 数组中,当点击某一个 TabBarItem 时,根据需要添加具体的控制器
    topViewControllers = [homeNav, mediumNav, broadcastNav, groupNav, profileNav]

    // 初始化时,默认添加首页控制器
    self.addChildViewController(homeNav)
    homeNav.view.frame = self.view.bounds
    self.view.addSubview(homeNav.view)
    // 默认显示首页控制器
    self.selectedViewController = homeNav
    // 更新状态栏的状态
    self.setNeedsStatusBarAppearanceUpdate()
 }

3. 配置 TabBarView,监听其中的点击属性

  • 大家得到所有的图样和标题属性
  • 配置 TabBar 样式管理类
  • 监听TabBarItem 的点击操作(那里由于 Rx斯维夫特 会变得尤其不难)
  • 拍卖 TabBarItem 的点击事件

 fileprivate func configureTabBar() {
    // 拿到五个 BarItem 上的元素(图片和标题)
    let barItemElements: [TabBarItemElement] = [
        (normalImage: UIImage(named: "ic_tab_home_gray_32x32_"), selectedImage: UIImage(named: "ic_tab_home_32x32_"), title: "首页"),
        (normalImage: UIImage(named: "ic_tab_subject_gray_32x32_"), selectedImage: UIImage(named: "ic_tab_subject_32x32_"), title: "书影音"),
        (normalImage: UIImage(named: "ic_tab_timeline_gray_32x32_"), selectedImage: UIImage(named: "ic_tab_timeline_32x32_"), title: "广播"),
        (normalImage: UIImage(named: "ic_tab_group_gray_32x32_"), selectedImage: UIImage(named: "ic_tab_group_32x32_"), title: "小组"),
        (normalImage: UIImage(named: "profile_normal_32x32_"), selectedImage: UIImage(named: "profile_active_32x32_"), title: "我的")
    ]
    // 创建管理样式类
    let tabBarStyle = TabBarStyle(elements: barItemElements)
    // 拿到样式类,创建 TabBarView 
    let tabBarView = TabBarView(themeStyle: tabBarStyle)
    self.view.addSubview(tabBarView)
    // 监听 TabBarView 的 selectedIndexes 属性,当有点击操作时,触发处理点击事件的方法
    for selectedIndex in tabBarView.selectedIndexes {
        selectedIndex.drive(onNext: { [weak self] (index) in
            guard let strongSelf = self else {
                return
            }
            // 处理点击事件
            strongSelf.handleTopControllerSelectionEvent(currentIndex: index)

        }).disposed(by: disposeBag)
    }
 }

而其点击事件的拍卖如下:

fileprivate func handleTopControllerSelectionEvent(currentIndex: Int) {
   // 移除上一次选择的控制器
    if let selectedViewController = selectedViewController {
        selectedViewController.willMove(toParentViewController: nil)
        selectedViewController.view.removeFromSuperview()
        selectedViewController.removeFromParentViewController()
        selectedViewController.viewWillDisappear(false)
    }
    // 添加当前选择的控制器,并显示
    let currentSelectedViewController = topViewControllers[currentIndex]
    self.addChildViewController(currentSelectedViewController)
    currentSelectedViewController.view.frame = self.view.bounds
    self.view.addSubview(currentSelectedViewController.view)
    currentSelectedViewController.didMove(toParentViewController: self)
    self.selectedViewController = currentSelectedViewController
    self.setNeedsStatusBarAppearanceUpdate()
    self.selectedIndex = currentIndex

    // 置顶 TabBar
    for subView in self.view.subviews {
        if let tabBar = subView as? TabBarView {
            self.view.bringSubview(toFront: tabBar)
        }
    }
}

OK,到那里,大家一个不难易行的种类框架就早已成功,其成效如下:

管理 2

BasicInterface.gif

你能够在
https://github.com/iJudson/RxBasicInterface
<TabBarView 在 MenuViewController 的使用>
的分层上获得至今的代码。

单就自己所处的维也纳来看,Hong Kong盈科(迈阿密)律师事务所自二〇一〇年5月树立的话,已集结各样专业领域可以律师两百余人。在8年时光,盈科马尼拉就向上到200两人的律所团队,而树马上间在1988年的诞生地强所——安徽广泛律师事务所,现有执业律师和各项专业人士才230四人。其余律所用20年岁月累积的律所团队,盈科用了不到8年就到位了。那表明了怎么?

后续

自然一个简易的花色框架还不止这么些可能会有:

  • 导航栏 – NavigationBar
  • 顶部选拔栏 – TopBarColumnView

而那三个 View 的创办跟 TabBarView
的创办是一模一样的,大家都试着去创立体会下。我那边也不再赘余,而最终的作用如下:

管理 3

Last Version BasicInterface.gif

最终的代码,大家可以在
https://github.com/iJudson/RxBasicInterface
中找到。

即使那些主题框架还有哪些地方可以继承优化,请不吝评论告知自己。
管理,一经您认为这么些中央框架还不易,欢迎 star。

感谢!

固然盈科在都柏林落地较晚(二〇一〇年才确立新德里分所),不过该所极其器重进步范围,不考虑本土强所强劲的区域优势,试图从规模上完胜其余律所。其一初叶的韬略定位就控制了我们想到盈科的第一印象就是:大。除此之外,什么都并未。

那就是说律所大了,律师多了,管理就很难做好。我不是说,盈科没有管理人才,而是律所合伙制的特殊性决定了各样律师集团相对独立且分散,而公司化的律所在那方面就优势足够众所周知。所以,其余律所的律师社团混乱投入盈科,其实目标很引人注目,就是想凭借盈科平台优势,发展大团结。这就导致,盈科律师团体越来越多,业务部门越来越细化,团队成员更加多,律师素质也层次不齐,管理问题也越发多。所以说,借使律所盲目伸张,管理那地方的劳作没有跟进,必然会带动许多弊病。

一方面,在盈科实习的伴儿,也时常跟自家吐槽自己的小业主。我问她,主管不够好啊?教您东西啊?她说,不是业主不够好,而是经理都不会,怎么教我?老董的事体都是主办律师做的,他不做案子的,主办律师会教我有的,但论及也处理得不太好。除此之外,我也在无数地点听到盈科种种负面新闻,但都是中间传出去的,我们外人根本不得而知。

理所当然,盈科易胜华律师(我个人对易胜华律师极度爱慕)这几年也在新浪火了,其刊载的谈话、行为极为大胆,这在自然水准上,也潜移默化到群众或者同行对盈科的评价。

有盈科律师不服了,盈科那么多律师,出了一个张晴,出了一个易胜华,并不能够表示如何吧!对此,我可怜协理。

即使盈科这几年迅科沃兹飞拉动的题目多多,但是只可以认可的是,盈科也有分外突出的律师,而且卓殊低调地在挣钱。

京城盈科(都柏林)高级合伙人,知识产权事务部一部老总牟晋军律师主攻知识产权业务,不仅业务精湛,而且充裕愿意赞助后辈,重视青年律师成长。原Hong Kong盈科(迈阿密)高级合伙人李小非律师(现在独立创造律所-吉林成说律师事务所),主攻婚姻家事业务,在律所中正式评价,为人评价也中度受到认可。

如此那般说来,个体的表现本身与律所毫无干系,但放在整个律师行业里面,个人的一举一动与律所又紧密联系。

律所创办者应该都掌握,任何一家律所的品牌声誉建立都分外不错,不过毁之却弹指之间之间。

尽管盈科做得再糟糕,什么人能拍着胸脯说,自己的律所就从未有过问题?每一家律所,既有好的辩护人,也有不佳的律师。纵然盈科问题多,也不影响那几个精粹的辩护律师在盈科成长,崛起,重点在于你是否足够出色。即使您不够精美,你在哪个地方都不会发光。

为此,当大家谈起张晴律师,请不要再想他是盈科的,因为不是唯有盈科才会出“张晴”那样的辩护律师,每家律所都会有那般的人,只是在盈科被无限放大。

请记住,中国唯有一种律师:专业律师。

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注