我有一个我使用结构编程创建的项目,我希望将其作为面向对象的项目重构在最好的" bestpractices"办法。我可能是唯一一个使用这个项目的人,它实际上并不适合其他人。但我可能会把它作为卓越的例子展示给别人;)
我的问题非常普遍,但我希望这没关系。
我正考虑将它分成三种方式;后端(主类),前端(获取和发布检查,调用类功能),可视化(使用Twig模板)。 我的项目将使用IPS论坛软件的外部集成(用户会话将保留在那里)。 请参阅下面的代码,了解如何构建此代码。
我的问题:
myproject_class.php:
? extends PartDecorator<V, ? extends Part<V>>
前端index.php:
namespace MySpace;
use \PDO;
use \PDOException;
use \Exception;
class MyProject {
public $projectdata;
public $errormessages;
public $ips_member;
function __construct () {
//set up vars for error messages
$this->errormessages["database_queryfailed"] = "Query failed";
$this->errormessages["general_missingdata"] = "Missing data";
$this->errormessages["handling_something"] = "Some error";
}
public function displaySomeData ( $id ) {
if ($id == ""){
throw new Exception($this->$errormessages["general_missingdata"]);
}
try{
$sql = "GET SOME DATA FROM DB";
//PDO execute
}catch (PDOException $e) {
throw new Exception($this->$errormessages["database_queryfailed"] . " SQL: " . $sql);
}
$this->projectdata = array();
$this->projectdata["one"] = "cool";
$this->projectdata["two"] = "verycool";
if ($someerror){
throw new Exception($this->$errormessages["handling_something"]);
}
}
public function createSomeData(){
try{
$sql = "INSERT SOME DATA IN DB";
//PDO execute
}catch (PDOException $e) {
throw new Exception($this->$errormessages["database_queryfailed"] . " SQL: " . $sql);
}
}
}
感谢您的帮助!
答案 0 :(得分:0)
如果您的代码库大约是10k行,那么你无法在两到三个类中填充(好吧,显然你可以,但这是一个糟糕的主意)。
首先,您应该在模板中提取HTML。 Twig是一个不错的选择,应该很好。但下一步可能是引入路由逻辑,这将允许您自动选择要呈现的模板。
关于您对OOP的一般理解,我建议您观看this和this讲座。因为我有一种感觉,你并不真正理解OOP范式。
并且不要滥用extends
个关键字。在OOP中有这个旧的引用:&#34;你应该赞成合成而不是继承&#34; 。这总结得很好。
关于错误处理,我几天前写过这篇文章,所以我只是懒惰并引导你去older post,简要介绍了常见的方法并触及了每个方法的一些缺点。 / p>
最后,为了处理DB:需要访问DB的每个类都应该在其构造函数中传递PDO(或MySQLi)的实例。如果您有多个此类,则阅读this post可能有助于共享该连接实例。