저는 최근에 기존 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 배경에서 소규모 응용 프로그램을 작성하고 일반적으로 응용 프로그램의 각 개체에 대해 작은 Business Object를 구축하는 데 익숙해졌습니다 (거의 데이터베이스 테이블과 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 기본적으로 Person은 평범한 오래된 비즈니스 객체가됩니다. 데이터베이스 지속성은 독립적입니다. – Cerad