[英]How can a class be loosely coupled to an application if it is reading from a database and interpreting the results?
作為一個PHP開發人員,我的大多數項目都是數據庫驅動的。 我是OOP的摯愛者,雖然剛接觸對象世界,但我嘗試遵循最佳實踐來提高自己的能力。
如果我有一個需要從數據庫獲取信息的對象,那么該對象是如何松散耦合的,因為它嚴重依賴於數據庫的返回結果?
代碼示例:
<?php
class Test {
protected $repository;
public function __construct(Repository $repository)
{
$this->repository = $repository;
}
public function process()
{
$results = $this->repository->where('id', 1)->get();
( ! empty($results) ) ?: ''; // do something bad.
foreach ($results as $result) {
// This is my problem, my class now knows it needs an array key of name to be available.
// Is this bad?
echo $result['name'];
}
}
}
在這里,我的班級期望使用名稱的數組鍵。 我覺得這很不對勁,因為現在我的課已經與結果集緊密聯系在一起了...
我已經在應用程序層上進行了大量閱讀,例如域層,服務層,事務腳本,應用程序層等。
即使具備了這些知識,我也看不到解決問題的方法。
很高興聽到您對我是否無緣無故地發瘋的想法。
看到一些代碼示例或進一步的閱讀材料,書籍等鏈接也將很不錯。
我認為您可能對此太過極端了。 我不會花太多時間試圖弄清存儲庫如何不知道您有一個名為name的密鑰。 有人將不得不依賴於您代碼中的某個地方,我認為您的repo類不是放那個的壞地方。
最后,您的目標應該只是在實施新功能,業務規則或修復錯誤時節省您和該代碼庫的維護人員時間。 根據我的經驗,您可以通過隔離應用程序的各個部分(可以預見其復雜性或大量更改)來實現此目的。
因此,除非該鍵需要進行大量更改,或者從結果集中檢索數據將是一個復雜的過程,否則我不必擔心倉庫會知道結果集中的鍵名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.