[英]Multiple DAL design pattern
我對python比較陌生。 我正在構建一個系統,該系統最初將從數據庫中獲取數據,但是在將來的某個時候,我們將從服務中獲取數據。 為了解決這個問題,我創建了一個稱為BaseDAL的抽象基類,它定義了我的數據獲取器:
class BaseDAL(object):
__metaclass__ = ABCMeta
@abstractmethod
def get_securities(self):
pass
@abstractmethod
def get_security_data(self, ticker):
pass
這里的想法是,最初的具體實現將從數據庫中獲取,但是當服務准備就緒時,我將簡單地創建另一個從該服務獲取的具體實現。
這是針對此類問題的正確設計/解決方案嗎?
其次,基於從配置文件讀取的類名,有條件地實例化具體提供程序的好方法是什么。 我想像這樣的東西..但是需要有關如何從字符串名稱實例化實例的幫助:
class DALFactory(object):
"""reads a config file, creates a concrete provider, and always return that instance"""
__provider = None
def __init__(self):
pass
@classmethod
def get_provider(cls):
if cls.__provider is None:
cls.__provider = get_provide_type_from_config()
return cls.__provider
看來您是Java程序員。 設計模式,抽象方法和復雜的繼承層次結構在Python中實際上是未知的:由於使用鴨子類型,沒有令人信服的理由讓您的其他DAL*
類從BaseDAL
繼承-具有適當命名方法的兄弟類可以完成工作以及更少的冗長程度。
Getter和Setter基本上也沒有使用:只需訪問所需的實際屬性即可。 如果以后需要將其重構為方法,則可以在該方法上使用@property
,而無需進行任何更改。
編輯:如果DBDal
和WSDal
是您的兩個類,則可以像這樣創建一個簡單的“工廠”(利用一流的功能):
def make_dal(name):
return {
'DBDal identifier string': DBDal,
'WSDal identifier string': WSDal
}[name]()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.