Я недавно начал работу над уже существующим PHP-приложением, и у меня возникли проблемы, когда я пришел к тому, что я должен улучшить масштабируемость этого приложения. Я из фон C# .NET, поэтому идея разделения проблем не нова для меня.Стандарты для хорошо отделяемого PHP-приложения
Прежде всего, я хочу рассказать вам, что именно я ищу. В настоящее время это приложение имеет довольно большой размер, состоящий из 70 таблиц базы данных и ~ 200 страниц. По большей части эти страницы просто выполняют операции CRUD в базе данных, редко что-либо на самом деле программно интенсивно. Почти все страницы в настоящее время с помощью кода сродни этому:
$x = db->query("SELECT ID, name FROM table ORDER BY name");
if ($x->num_rows > 0) {
while ($y = $x->fetch_object()) {
foreach ($y as $key => $value)
$$key = $value;
Очевидно, что это не подходит для приложения, которое является столь же большой, как один я, как предполагается, будет работать дальше. Теперь я, будучи с фона C# .NET, использую для создания небольших приложений и обычно создаю небольшой бизнес-объект для каждого объекта в моем приложении (почти 1 к 1 соответствует моим таблицам базы данных). Они следуют за форму этого:
namespace Application
{
public class Person
{
private int _id = -1;
private string _name = "";
private bool _new = false;
public int ID
{
get{ return _id; }
}
public string Name
{
get { return _name; }
set { _name = value; }
}
public Person(int id)
{
DataSet ds = SqlConn.doQuery("SELECT * FROM PERSON WHERE ID = " + id + ";");
if (ds.Tables[0].Rows.Count > 0)
{
DataRow row = ds.Tables[0].Rows[0];
_id = id;
_name = row["Name"].ToString();
}
else
throw new ArgumentOutOfRangeException("Invalid PERSON ID passed, passed ID was " + id);
}
public Person()
{
_new = true;
}
public void save()
{
if (_new)
{
doQuery(" INSERT INTO PERSON " +
" ([Name]) " +
" VALUES " +
" ('" + Name.Replace("'", "''") + "'); ");
}
else
{
SqlConn.doNonQuery(" UPDATE PERSON " +
" SET " +
" [Name] = '" + _name.Replace("'", "''") + "' WHERE " +
" ID = " + _id);
}
}
в более короткие сроки, они просто имеют атрибуты, которые имитируют таблицу, свойства, конструктор, который вытягивает информацию, и метод, называемый save
, который будет совершать какие-либо изменения, внесенные в объект ,
На мой вопрос: во-первых, это хороший способ сделать что-то? Это всегда хорошо срабатывало для меня. Во-вторых, и что еще более важно, это также хороший способ сделать что-то в PHP? Я уже заметил, что некорректная нагрузка PHP вызвала у меня проблемы в том, как я это делаю, и перегрузка метода не является совершенно новой. Если это не очень хорошая практика, есть ли хорошие примеры того, как я должен адаптировать этот проект к 3 уровням? Или, возможно, мне не следует пытаться это делать по какой-то причине.
Прошу прощения за длительность вопроса, но я прорывался в Интернете в течение недели или около того, но все, что я когда-либо нахожу, это стандарты синтаксиса, а не стандарты структуры.
Заранее спасибо.
Возможно, вы захотите взглянуть на подход Doctrine 2. http://docs.doctrine-project.org/en/latest/index.html В принципе, человек становится простым старым бизнес-объектом. Материал сохранности базы данных является независимым. – Cerad