V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aababc
V2EX  ›  编程

对象属性还是方法参数

  •  
  •   aababc · 296 天前 · 1016 次点击
    这是一个创建于 296 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在项目开发的过程中经常遇到的一个选择模式

    class A
    {
        private $dep;
    
        public function __construct($dep)
        {
            $this->dep = $dep;
        }
    
        public function handle()
        {
            $this->f1();
            $this->f2();
        }
    
        public function f1()
        {
            // 这里也依赖 $dep
        }
    
        public function f2()
        {
        }
    }
    

    还有下边这种模式

    class A
    {
        public function handle($dep)
        {
            $this->f1($dep);
            $this->f2();
        }
    
        public function f1($dep)
        {
            // 这里也依赖 $dep
        }
    
        public function f2()
        {
        }
    }
    

    针对第一种形式把参数依赖在对象内部,在调用的时候感觉相对容易,针对第二种形式感觉比较方法依赖注入,大家有没有方法论来评估这两种情况应该怎么选择

    6 条回复    2024-01-24 13:50:00 +08:00
    Ayanokouji
        1
    Ayanokouji  
       296 天前
    为啥发 go 里边
    aababc
        2
    aababc  
    OP
       296 天前
    @Ayanokouji 我还没有完成就发布了,不知道点击到了啥
    BeijingBaby
        3
    BeijingBaby  
       296 天前
    都可以啊,一个依赖被多处使用就构造传入。单次使用,可以方法传入。
    按需选择。
    happinessnch
        4
    happinessnch  
       296 天前
    OOP 的话要看 dep 和 A 的抽象关系,也看业务需求,也看设计思路。
    时间充裕先设计再开发,deadline 要到了先干再说,又不是不能用。
    aababc
        5
    aababc  
    OP
       296 天前
    @happinessnch 老哥能不能展开说说看
    happinessnch
        6
    happinessnch  
       296 天前
    比如 A 订单,dep 是 VIP 对象,
    为了方便计算折扣,A 持有一个 VIP 对象就很不合适。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4557 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:01 · PVG 18:01 · LAX 02:01 · JFK 05:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.