私は最近、既存の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;
を明らかに、これは私が働いてことになっています1ほどの大きさであるアプリケーションに最適ではありません。現在、私はC#.NETのバックグラウンドを持ち、小規模なアプリケーションを構築し、アプリケーション内のオブジェクトごとに小さなビジネスオブジェクトを構築していました(ほとんどの場合、データベーステーブルと1対1で一致します)。彼らは単にオブジェクトに加えられた変更をコミットしますテーブルを模倣属性、プロパティ、情報を引き出し、コンストラクタ、およびsave
というメソッドを持って、短い用語で
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);
}
}
:彼らはこの形式に従ってください。
私の実際の質問には:まず、これは良いことですか?それは常に私のためにうまくいった。もう1つ、もっと重要なのは、これもまたPHPでやりたいことですか?私は既にPHPの緩いタイピングが私のやり方で問題を引き起こしていることに気がつきました。メソッドのオーバーロードも全く新しいものではありません。これは良い習慣ではない場合、どのように私は3つの層にこのプロジェクトを適応する必要があります良い例がありますか?または、何らかの理由でこれをやろうとしないでください。
質問の長さは申し訳ありませんが、インターネットで1週間ほど掘り下げているわけではありません。構造基準ではなく構文基準があります。
ありがとうございます。
Doctrine 2のアプローチを見てみたいかもしれません。 http://docs.doctrine-project.org/en/latest/index.html基本的に、Personは普通の古いビジネスオブジェクトになります。データベース永続性は独立しています。 – Cerad