问题描述
我有一个应用程序,用户可以在其中更改某些设置。用户可以更改(设置)和读取(获取)其设置,这是一种类似于映射的结构。
我制作了一个UserSettingsInteractor
对象,该对象实现了更改和读取设置的用例,在Python中,它看起来像:
class UserSettingsInteractor:
def __init__(self,...): ...
def set_foo(self,user_id: int,value): ...
def get_foo(self,user_id: int): ...
def set_bar(self,value): ...
def get_bar(self,user_id: int): ...
...
其中的优点是现有设置foo
和bar
是明确的。但是写一个setter和getter使它变得很冗长。可以概括为:
class UserSettingsInteractor:
def __init__(self,...): ...
def set(self,setting: str,value): ...
def get(self,setting: str): ...
现在,客户端代码知道设置的表示方式,它是一个键值对。难道不是会使代码更脆弱吗?
哪种方法更好?
解决方法
我认为,通用方法不会给您带来更多好处:
- 这不是更好的可读性-设置名称将仅作为参数而不是函数名称出现。而且您将必须在getter / setter内部实现一个长例语句,而不是在类级别区分几个函数。
- 同一级别的耦合-如果设置发生更改(例如,商品的数量或名称),您仍然必须在客户端和服务端都进行更改。
- 您不会在编译时看到语义错误(我想这就是您所说的“脆弱”的意思)。
使用我能想到的通用方法的唯一原因是,由于某种原因,您需要一个独立于特定设置的稳定接口,例如,如果您要开发通用的UserSettings
服务,在另一个应用程序场景中重用。