• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
طرح پیاده سازی یک کتابخانه پایگاه داده
#1
file direction :
کد:
+ library
  + db/
  | + command/
  | | + exception.php
  | + driver/
  | | + mysql/
  | | | + exception.php
  | | + exception.php
  | | + mysql.php
  | + command.php
  | + driver.php
  | + exception.php
  + db.php
  + exception.php

view classes :
پیاده سازیش و گزاشتنش توی اینجا یکم سخته.
بجاش فایل ها رو ضمیمه می کنم Big Grin
---
یه ابزار آنلاین پیدا کردم و دیاگرام رو کشیدم. (البته نمی دونم چقدر درسته Angel)
[عکس: 3143cde7]


sample code :
اتصال :
کد پی‌اچ‌پی:
//  
// coonect sample
//

// config db connection
$dbConfig = array(
    
'hostname'=>$hostname,
    
'username'=>$username,
    
'password'=>$password,
    
'database'=>$database,
    
'driver'=>'mysql'
    
);

// create object
$db = new Raspina\Db($dbConfig); 

پرسش :
کد پی‌اچ‌پی:
//
// select query
//

// login a user
$user $db->User->Read(array(
    
'col'=>'all',
    
'where'=>array(
        
'text'=>'id=%id%',
        
'id'=>$userId
        
)
    )); 

درج :
کد پی‌اچ‌پی:
//
// insert query
//

// new user
$user = array(
    
'username'=>$username,
    
'password'=>$password,
    
'email'=>$email
    
);

// add user
if($db->User->Create($user)){
    
// ...


ویرایش :
کد پی‌اچ‌پی:
//
// update query
//

// edit value
$user = array(
    
'password'=>$password,
    
'email'=>$email
    
);

if(
$db->User->Edit(array(
    
'update'=>$user,
    
'where'=>array(
        
'text'=>'id=%id%',
        
'id'=>$userId
        
))){
    
// ...


حذف :
کد پی‌اچ‌پی:
//
// delet query
//

if($db->User->Delet(array(
    
'where'=>array(
        
'text'=>'id=%id%'
        'id'
=>$userId
        
)
    ))){
    
// ...

  پاسخ
تشکر شده توسط : Y.P.Y Reza admin undefined
#2
بجای نام فایل db.php که با نام پوشه ش هم یکیه، Index.php بزاریم.
همچنین Database بجای db. یا کلاً storage

کد:
+ library
  + database/
    + command/
      + exception.php
    + driver/
      + mysql/
        + exception.php
      + exception.php
      + index.php
    + command.php
    + index.php
    + exception.php
  + index.php
  + exception.php
تمیز تر و خواناتر میشه اینطوری
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط : admin
#3
اسمش Db باشه بهتر نیست؟ کوچیکتر و جمو جورتره. من بیشتر نظرم اینجوری هست

کد:
+ library
  + Db/
    + Exception/
      + ExceptionInterface.php
      + ErrorException.php
      + InvalidArgumentException.php
    + Driver/
      + Exception/
        + ExceptionInterface.php
        + ErrorException.php
        + InvalidArgumentException.php
      + Platform/
        + Mysql.php
        + Sqlite.php
      + Abstract.php
    + Query.php
    + Db.php
  پاسخ
تشکر شده توسط :
#4
آره خوبه
ولی exception هات عین ویروس همه جارو تصاحب کردن

این سه تا رو هم ببین:
+ ExceptionInterface.php
+ ErrorException.php
+ InvalidArgumentException.php
چون داخل پوشه exception هستن فکر نمی کنم نیازی به اسمگذاری مجدد exception باشه. interface error invalidArgument...

و اینکه منظورت از query.php چیه دقیقاً؟
result یا sql/command?


نقل قول:$db->User->Read
محمد این اتصالاتت رو نمی تونی اینطوری کنی؟
...db->Read->User
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط : admin farhadfery
#5
آره اسم Exeption ها رو برداریم از روی فایلها بهتره
به جای Command هم Query گذاشتم. چون Command یه مقدار داخل دیتابیس بی معنیه
  پاسخ
تشکر شده توسط :
#6
موضوع اول اینکه چرا کاراکتر اول کلامات بزرگ باشن؟!
کد پی‌اچ‌پی:
$db->User->Read 
اینجوری بهتر نیست؟
کد پی‌اچ‌پی:
$db->user->read 
یه shift هم کمتر بگیریم خیلیه!(اسمایلی واژه تنبلی را صرف کردن) Big Grin

مورد بعدی ساخت ارایه و استفاده از where هست. نمیدونم، اما اگر در اینده به مشکلی بر نمیخوریم بهتره از ساختار where فعلی دیتابیس استفاده کنیم.
یعنی رشته ی شرطمون رو داخل تابع به صورت زیر داشته باشیم(یه چیزی تو این مایه ها)

کد پی‌اچ‌پی:
$user $db->user->select('table')->where("id='".ID."'"

حذف هم همین طور

کد پی‌اچ‌پی:
$db->user->delet('id',$userId); 

قسمت بعدی ساخت ارایه برای قسمت هایی مثل درج و... هستش.

کد پی‌اچ‌پی:
$user = array(
    
'username'=>$username,
    
'password'=>$password,
    
'email'=>$email
    
); 

ما که نباید این ارایه ها رو بسازیم Big Grin درسته؟
اگر فیلد های داخل فرممون هم نام با ستون های اون جدولی باشه که قراره این اطلاعات توش درج شه و بعد از ارسال فرم تابعی باشه که نام این فیلدها + مقدارشون رو به صورت یک ارایه انجمنی مثل ارایه user بالا در بیاره موضوع ساخت ارایه هم برطرف میشه.

رعایت موارد بالا کارمون رو هنگام توسعه اسون و سریعتر میکنه.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : Y.P.Y
#7
کلآ چیزی از کاره من موند ؟ :دی

--
لازم تر این فعلا مشخص کردن ساختار پروژست که ظاهرا داره سخت هم می شه.
ساختار کتابخونه ، ساختار application و ...
  پاسخ
تشکر شده توسط :
#8
نقل قول:کلآ چیزی از کاره من موند ؟ :دی

اتفاقا از این کتابخانه دیتابیس خیلی خوشم اومد Heart
موضوعی بود که اصلا به فکرم نمیرسید!

ای کاش در مورد این دیاگرام و بخش هاش بیشتر توضیح میدادی.

نقل قول:لازم تر این فعلا مشخص کردن ساختار پروژست که ظاهرا داره سخت هم می شه.

در مورد ساختار هم منتظرم یوشا و رضا نظرشون رو بدن تا ساختارو بفرستم واسهی وحید تا نهایی شه.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط :
#9
نقل قول:ای کاش در مورد این دیاگرام و بخش هاش بیشتر توضیح میدادی.
چه توضیحی آخه! تصویر به این واضحی. :دی

توضیح :
کلاس Raspina\DB با دو کلاس Raspina\Db\Driver\MySql و Raspina\Db\Command یه را بطه یه طرفه داره یعنی از اونها استفاده می کنه
و کلاس Raspina\Db\Driver\MySql از اینترفیس Raspina\Db\Driver ارث (implements) می بره.

--
اینجوری کار یکم کند پیش نمیره؟! یا من زیادی متوقعم؟!
  پاسخ
تشکر شده توسط : undefined
#10
نقل قول:کلاس Raspina\DB با دو کلاس Raspina\Db\Driver\MySql و Raspina\Db\Command یه را بطه یه طرفه داره یعنی از اونها استفاده می کنه
و کلاس Raspina\Db\Driver\MySql از اینترفیس Raspina\Db\Driver ارث (implements) می بره.

اون فلش ها رو هر کی ببینه به رابطه شون پی میبره Big Grin

من متوجه نشدم دقیقا وظیفه ی Raspina\DB,Raspina\Db\Driver\MySql و Raspina\Db\Command چین؟

نقل قول:اینجوری کار یکم کند پیش نمیره؟! یا من زیادی متوقعم؟!

چون کارو هنوز شروع نکردیم به نظر منم کند عمل میکنیم. بذار یه مقدار جلوتر بریم Wink.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان