gpt4 book ai didi

Scala - 在伴随对象中实现 "manager"模式?

转载 作者:行者123 更新时间:2023-12-02 15:39:27 24 4
gpt4 key购买 nike

当我用 Java 编程时,我曾经有对象和管理器。你知道,一个类(通常是单例),它会保存某个类的对象集合,并让我们方便地管理它们。现在,在 Scala 中,我发现自己越来越倾向于将所有功能放在伴随对象中并避免创建不同的管理器对象。

一切都从为实例提供 ID 开始,然后……为什么不在伴随对象中包含集合?如果集合在那里,为什么不把所有的方法都放在里面呢?因此,不再需要经理。然而,一个特点是伴随对象通常有一个单一的名称,如 Car(不像 CarsCarManager,它们假设多个),所以方法与复数一起操作的对象名称的耦合措辞看起来很奇怪。

我想知道您对这种情况的看法,并想知道这种方法是否优于看似不必要的臃肿管理器模式。任何对相关文章的引用也将不胜感激。

最佳答案

越简单越好;对象内部的集合确实很简单。但是,您还应该避免让您的对象依赖于静态对象。这将创建一个严格的结构并使测试更加困难。

我会看一下蛋糕图案(参见 How do you do dependency injection with the Cake pattern without hardcoding? )。通过这种方式,您可以将 CarManager 放在一个对象中,并通过 CarRepositoryComponent 将其混合到您的依赖项中。

非编译示例:

val someService = new SomeService 
with MyRepairServiceComponent with CarCollectionRepositoryComponent
someService.repairCar(8)

trait SomeService extends RepairServiceComponent with CarRepositoryComponent {
def repairCar(id: Int): Status = repairService.repair(carRepository.get(id));
}

trait CarRepository {
abstract def get(id: Int): Car
}
trait CarRepositoryComponent {
abstract def carRepository: CarRepository
}

object CarManager extends CarRepository {
private var cars = Map[Int, Car]()
def get(id: Int): Car = cars(id)
}
trait CarCollectionRepositoryComponent {
def carRepository = CarManager
}

关于Scala - 在伴随对象中实现 "manager"模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10428056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com