我該怎麼辦:
我的模型並不實體連接到數據庫(如果我不使用原則),所以沒有「活動記錄」的方法。一個對象不知道如何獲取其依賴關係(例如,用戶可能有n條評論,我的模型不知道如何獲得評論)。
class User{
private $name;
private $password;
// getter and setters
}
我有一些業務邏輯可以從提供者獲取模型,一個服務可以有很多提供者。
class UserService{
function __construct(IUserProvider $userProvider){
$this->userProvider = $userProvider
}
function getUsers(){
// return an array of user objects
return $this->userProvider->getUsers();
}
}
最後我有一個知道如何從數據庫中請求DATAS,一個文本文件,一個JSON文件,web服務數據提供:
class UserProvider implements IUserProvider{
function __construct(Connection $connection){
$this->connection = $connection;
}
function getUsers(){
return $this->toUsers($this->connection->fetchAssoc("Select * from users"));
}
function toUsers(array $datas){
// convert user records to an array of User
(...)
return $users;
}
}
則接口
interface IUserProvider{
/**@return array an array of User */
function getUsers();
}
如果我需要獲得用戶評論,那麼我的評論服務知道如何從用戶ID獲取評論。所以要得到一個用戶及其評論,我需要2個對數據庫的請求。一個來自UserProvider,另一個來自CommentProvider。
,所以我有3層:
- 我的應用層(顯示用戶,響應請求無論...)
- 我的服務層(其具有與一個命令行接口的工作,而不是知道我的web應用程序,除了密碼編碼,這通常被綁定到框架我用的,ACL充塞也許...)
- 其中一無所知其他層我的數據訪問層的
我的圖層溝通的唯一方式是通過模型從層到層傳遞。
而我所有的類都是用依賴注入容器構建的,所以接線不成問題。
下面是一個應用程序,我做的爲例,它是開源:https://github.com/Mparaiso/silex-bookmarkly
任何想法歡迎。
來源
2013-03-18 09:29:48
mpm
+1不錯的問題:) – 2013-03-18 09:02:53
+1太好了...... – 2013-03-18 09:27:19