PDA

View Full Version : سوال: چند سوال در مورد طراحی و برنامه نویسی Wep Applications



LORD AELX
یک شنبه 03 مرداد 1389, 13:26 عصر
سلام، من چند تا سوال در مورد طراحی و برنامه نویسی سیستم های تحت وب داشتم:



1. در مورد ساخت installation آیا راهکاری که در اینجا (http://www.barnamenevis.org/forum/showthread.php?p=1048883) ذکر کرده ام، خوب است؟



2. برای MultiLanguage کردن سیستم خود کدام روش را در پیش گیرم؟ چرا؟


استفاده از فایل های خارجی و دستور define
استفاده از فایل های خارجی و ذخیره سازی در متغیر
استفاده از فایل های خارجی و ذخیره سازی در آرایه بصورت زوج کلید و مقدار
استفاده از فایل های خارجی به فرمت ini
استفاده از Database
...

3. دستور setlocale دقیقا چه کاری انجام می دهد و چرا باید در انتهای فایل های خارجی زبان اضافه شود (در صورتیکه به فرمت PHP باشد)؟ آیا آرایه ای که به عنوان آرگومان دوم به این تابع می دهیم، باید شامل Language string های زیاد و متفاوتی باشد، یا تنها استفاده از یکی دو مورد، کافی است؟

4. پس از اینکه کاربر login کرد، آیا فقط ذخیره یک مقدار در session برای یادآوری او کافی است؟

5. معمولا از فایل های htaccess که در فولدر خود برنامه قرار می گیرند (یعنی در سطح همان فولدر فعالیت می کنند)، چه استفاده هایی می شود و چه جور تنظیماتی برای امنیت بیشتر و ... انجام می گیرد؟



از وقتی که می گذارید و پاسخ هایی که دقیق و شیوا بیان می کنید پیشاپیش سپاسگذارم... :قلب:

Sajjad.Aghapour
یک شنبه 03 مرداد 1389, 13:55 عصر
1. اگر بخواهیم چند فرم متوالی (مثل فرم های install سایت) را تک به تک به کاربر نشان دهیم و پس از هر فرم با دکمه Next او را به فرم بعدی هدایت کنیم، این کار چطور می تواند در یک صفحه PHP انجام گیرد


http://www.google.com/search?q=php+form+wizard+tutorial



آیا باید با if و استفاده از isset برای عناصر هر فرم پر شدنشان را چک کنیم؟

فرستادن یک درخواست به سرور به صرف چک کردن اینکه متغیری ست شده است یا نه چندان عمل خوشایندی برای کاربر نخواهد بود.میتونید از JavaScript و یا Spry Control ها(که اونها هم برپایه JavaScript هستند) استفاده کنید...
http://www.google.com/search?q=form+validation+with+javascript

2.
3.
4.
.
.
پ.ن: من که حوصلم نرسید همش رو بخونم.بهتر بود سوالاتتون رو تک تک میپرسیدید

mohmadd
یک شنبه 03 مرداد 1389, 14:20 عصر
راستی این همون پروژست ؟ که از انرژی هسته هم مهم تره ؟:لبخند:


3. همانطور که می دانید، در سیستم های مختلف روش های مختلفی برای ادغام PHP با HTML استفاده می شود. مثلا یکی کد HTML را بصورت عادی در فایل PHP می نویسد و فقط قسمت های بخصوصی را با PHP تولید می کند، بعضی ها کلا به PHP همه نوع کدی را می سازند، بعضی ها کلا سیستم را بر پایه OOPپایه ریزی کرده اند و از توابع مخصوص برای چاپ هر قسمت بهره می برند و ... . به نظر شما چه شیوه ای استاندارد و درست تر است؟


خوب معلومه که OOP بهتره مخصوصا تو پروژهای بزرگ. (که از انرژی هسته ای هم مهمتره )
قابل اعتماد, هزینه نگهداری کمتر و و و ..
اما تو صفحات وبی که نیازی به برنامه ریزی خاصی نیست و ساده هستن همون روش اول بهتره.



و در یک سیستم هم که البته ناقص آن را مرور کردم، متوجه شدم به نوعی از دیتابیس استفاده کرده است. در کل، به نظر شما کدام روش مزیتاین سیستمارو رو از کجا میاری چک میکنی ؟
سایتشو لطف کن ما هم برم چکش کنیم.

LORD AELX
یک شنبه 03 مرداد 1389, 14:30 عصر
چرا همه تیکه تیکه می کنند، سوالات من رو و فقط به همون تیکه پاسخ می دهند؟! :لبخند: از طرف دیگه چرا پاسخ سوالات رو نمی دهید؟!! :ناراحت: میدونم زیاده، ولی زیاد تاپیک زدن هم کار جالبی نبود، من سعی کردم با فاصله گذاشتن و ... کاری کنم تا موقع خوندن اذیت نشوید... :چشمک: :بوس:



راستی این همون پروژست ؟ که از انرژی هسته هم مهم تره ؟:لبخند:



نه عزیزم!! :لبخندساده: من کی گفتم از انرژی هسته ای هم مهمتره؟! :لبخند: گفتم نمیخوام ایده ام لو بره!! :چشمک: این هم هیچ ربطی به اون قضیه نداره... من فقط دارم PHP و CSS و jQuery رو بطور حرفه ای یاد می گیرم، فقط همین! :لبخندساده:




خوب معلومه که OOP بهتره مخصوصا تو پروژهای بزرگ. (که از انرژی هسته ای هم مهمتره )
قابل اعتماد, هزینه نگهداری کمتر و و و ..
اما تو صفحات وبی که نیازی به برنامه ریزی خاصی نیست و ساده هستن همون روش اول بهتره.


میدونم OOP کجا بهتره، فقط میخوام بدونم این کار تا چه حد معموله... و تو PHP چطور طراحی میشه... مثلا آیا وظیفه چاپ رو به تابع خاصی میدهیم یا نه و فقط خود کد PHP را در قالب OOP می بریم؟



این سیستمارو رو از کجا میاری چک میکنی ؟
سایتشو لطف کن ما هم برم چکش کنیم.

چیزی که تو اینترنت ریخته، اسکریپت هتسش، از VB و phpBB و eFront و ModX گرفته تا DataLife و ... و ... و ... و همینطور اسکریپت های غیر تجاری و رایگان بسیاری که توسط OpenSource کارها و افراد عادی نوشته شده اند...

Sajjad.Aghapour
یک شنبه 03 مرداد 1389, 15:02 عصر
چرا همه تیکه تیکه می کنند، سوالات من رو و فقط به همون تیکه پاسخ می دهند؟! :لبخند: از طرف دیگه چرا پاسخ سوالات رو نمی دهید؟!! :ناراحت: میدونم زیاده، ولی زیاد تاپیک زدن هم کار جالبی نبود، من سعی کردم با فاصله گذاشتن و ... کاری کنم تا موقع خوندن اذیت نشوید... :چشمک: :بوس:


به هرحال اذیت میشن و از پاسخگویی به همه سوالات منصرف...
سوالاتی که شما دنبال اونها میگردید مسائل حل شده ای هستند که قبلا بحث شده اند.برای مثال:


8. آیا معمول است که تمام توابع مورد نیاز مان را در برنامه (همچون هندل کردن خطاها، login کردن، register کردن و ...) را بصورت تابع در بیاوریم و همه آن ها را در یک فایل مثلا با نام funcs.php ذخیره کرده تا بعدا از آن ها استفاده کنیم؟

اگر کمی هم فکر کنید میبینید که اصلا کار جالب نیست.در مسائل OOP بحث Refactoring بسیار مهم است.اگر نگاهی به این بحث بیاندازید خواهید دید که Extract Methods نظر شما رو به کل سرکوب میکنه....
یا اینکه:


9. آیا معمول است همه محتویات صفحه index را در خود آن نگه داریم یا باید هر قسمت (مثلا login، ثبت نام، صفحات زیرین و ...) را جداگانه در فایل هایی ذخیره کرد؟ solution اصلی چیست؟

به قول خودتون


چیزی که تو اینترنت ریخته، اسکریپت هتسش، از VB و phpBB و eFront و ModX گرفته تا DataLife و ... و ... و ... و همینطور اسکریپت های غیر تجاری و رایگان بسیاری که توسط OpenSource کارها و افراد عادی نوشته شده اند...

چرا سیستم هایی مثل Wordpress رو یه نگاهی نمیاندازید که ببینید برای این کار از چه روشی استفاده کرده اد...module هایی که نوشته میشن به چه نحو استفاده و مدیریت میشن...


من فقط دارم PHP و CSS و jQuery رو بطور حرفه ای یاد می گیرم، فقط همین!

رجوع کنید به منابع خارجی....


میدونم OOP کجا بهتره، فقط میخوام بدونم این کار تا چه حد معموله... و تو PHP چطور طراحی میشه... مثلا آیا وظیفه چاپ رو به تابع خاصی میدهیم یا نه و فقط خود کد PHP را در قالب OOP می بریم؟

وقتی میدونید OOP کجا بهتره پس معمول بودن اون رو هم میدونید.
یعنی چی که وظیفه چاپ رو به تابعی خاص بدهیم یا کد PHP رو به قالب OOP ببریم؟(این حرفتون رو تشریح کنید لطفا.مگه تابع و OOP در تضاد یکدیگرند که اونها رو مقابل هم قرار دادید؟)

rapidpich
یک شنبه 03 مرداد 1389, 15:09 عصر
کلا شما باید یک فریمورک برای برنامه نویسی انتخاب کنی و مطمئن شی اون فریمورک تمامی امکانات رو براحتی در اختیارت میزاره

mohmadd
یک شنبه 03 مرداد 1389, 15:16 عصر
اگر کمی هم فکر کنید میبینید که اصلا کار جالب نیست.در مسائل OOP بحث Refactoring بسیار مهم است.اگر نگاهی به این بحث بیاندازید خواهید دید که Extract Methods نظر شما رو به کل سرکوب میکنه....میشه بیشتر در این مورد توضیح بدید ؟





7. تنظیمات مهمی که حتما باید در فایل .htaccess موجود در folder خود وبسایت، انجام گیرد چیست؟ مثلا در مورد Query String ها و یا Hot Linking ها و ... . اگر ممکن است، خود دستور را نیز قرار دهید و ذکر کنید چطور می شود کاری کرد که این دستورات برای هر دامنه ای کار کند و نیاز به تغییر نداشته باشد؟ در صورتیکه این کار ممکن نیست، آیا باید این فایل را هنگام نصب با PHP ویرایش کنیم؟ (چگونه؟ آیا راهی هست که فقط قسمتی را تغییر دهیم یا اینکه باید کل محتویات را دوباره نویسی کنیم؟)
این مثال رو ببین :

RewriteEngine On
RewriteRule ^page/(.+)/?$ index.php?page=$1این یه مثال ساده از query string هستش
بعد از داریکتوری page/ هر چیزی 1 تا چند بار رو برمیگردونه به $1 و ؟/ اخر اون به این معنیه که / میتونه 0 تا 1 بار تکرار بشه
و بعد $1 رو به صورت query به index.php میفرسته .
با mod_rewrite خیلی کارا میشه کرد
میشه کوکی های مختلفی رو ست کرد
زمان های مختلف صفحات مختلفی رو نشون داد
referer رو چک کرد و مثلا اگه مال سایت خودمون نبود به یه صفحه دیگه ای بفرستیم و ...

LORD AELX
یک شنبه 03 مرداد 1389, 15:47 عصر
یعنی چی که وظیفه چاپ رو به تابعی خاص بدهیم یا کد PHP رو به قالب OOP ببریم؟(این حرفتون رو تشریح کنید لطفا.مگه تابع و OOP در تضاد یکدیگرند که اونها رو مقابل هم قرار دادید؟)

نه... من در واقع دارم دنبال نحوه نوشتن می گردم... منظورم هم این بود که HTML و PHP رو کلا جدای از هم فرض کنیم و کار رو انجام بدهیم (اکثریت خروجی ها) و یا کل خروجی را با PHP بفرستیم یا ... . چیزی که من دنبالش هستم رو اصطلاحا میگن دستخط برنامه نویس! :لبخندساده: میدونم این چیزیه که با تجربه در اون حیطه بدست میاد و برای هر کس هم به یک نحوی هست، ولی دارم سعی می کنم زودتر به این موضوع برسم و قبل از این که کل اسکریپت های موجود رو یک نگاه بندازم، یک شیوه بهینه پیدا کنم. فقط همین! :چشمک:

سوالات بنده برای آگاهی از نحوه انجام کارهایی که گفتم، نیستند. چون به هر حال با یک شیوه مشخص و منطقی تمام این مسائل حل می شود. من انتظار داشتم تجربه شما رو در زمینه طراحی کد برنامه بدست بیاورم و به یک استاندار پیشفرض برای خودم دست پیدا کنم. همانطور هم که گفتم، بررسی اسکریپت های مختلف فقط باعث میشه با دستورات بیشتر و حالات مختلفی از کدنویسی آشنا بشویم و به هر حال نمیشه به راحتی خوبی های هر کدوم رو استخراج کرد و کنار هم قرار داد. این استاندار کد و پیچیده نبودن اون هست که برای من مهمه.

با تشکر :قلب:

Sajjad.Aghapour
یک شنبه 03 مرداد 1389, 20:55 عصر
میشه بیشتر در این مورد توضیح بدید ؟

این بحث مباحث زیادی رو دربر میگیره مخصوصا در زبان های Pure OOP نظیر Java و Net Based Languages. که خارج از حوصله بنده هستش که در اینجا مطرح کنم.اما در حالت کلی Refactoring تکنیکی است جهت افزایش قابلیت خوانایی(Readability) و همچنین Maintenace برنامه که البته خود تکنیک هایی رو نیز شامل میشه.نظیر همین Extract Method که عرض کردم.اگر بخوام در این مورد هم توضیحی کلی بدم به این صورت خواهد بود که هر عمل تابع مورد نظر خود را خواهد داشت.
شما ممکن هست که یک کلاس داشته باشید برای عملیات مختلف روی پست هایی نظیر اخبار و ....
1. تابعی خواهید داشت داشت که کل اخبار رو از DB میخواند و اونها رو در Page های مختلف نمایش خواهد داد(GetNews).
2. تابعی خواهید داشت که یک Query رو اخبار برای جستجوی یک کلیدواژه انجام خواهد داد و نتایج را در Page های مختلف نمایش خواهد داد(Search).

function GetNews()
{
$query = '...';
$result = mysql_query($query);
mysql_fetch_array($result);
}

function Search($keyword)
{
$query = '...';
$result = mysql_query($query);
mysql_fetch_array($result);
}


در اینجا دو تابع شاید بسازید که هر تابع کار خاص خود را انجام خواهد داد.اما یک کار دیگر هم میتوانید انجام دهید.
1. یک تابع که یک Query برای نمایش کل اخبار برای شما ایجاد خواهد کرد(GetNews)
2. یک تابع که یک کلیدواژه از شما خواهد گرفت و بر اساس اون Query مورد نظر را خواهد ساخت(Search)
3. یک تابع که هر Query از خواهد گرفت و محتویات مربوطه رو نمایش خواهد داد(ShowNews)


function GetNews()
{
$query = '...';
$this->ShowNews($query);
}

function Search($keyword)
{
$query = '...';
$this->ShowNews($query);
}

private function ShowNews($query)
{
$result = mysql_query($query);
mysql_fetch_array($result);
}


لینک های زیر هم به شما در این موضوع کمک خواهند کرد
http://en.wikipedia.org/wiki/Code_refactoring
http://www.refactoring.com
http://www.refactoring.com/catalog/extractMethod.html

http://www.google.com/search?q=refactoring+php+code


موفق باشید/

eshpilen
دوشنبه 04 مرداد 1389, 09:41 صبح
1. اگر بخواهیم چند فرم متوالی (مثل فرم های install سایت) را تک به تک به کاربر نشان دهیم و پس از هر فرم با دکمه Next او را به فرم بعدی هدایت کنیم، این کار چطور می تواند در یک صفحه PHP انجام گیرد؟ آیا باید با if و استفاده از isset برای عناصر هر فرم پر شدنشان را چک کنیم؟ آیا باید هر فرم جدای از فرم دیگر چاپ شود یا می توان تگ form و دکمه Submit (همان Next) مشترکی برای همه تعریف کرد و فقط مابین آن ها را با PHP تغییر داد. خواهش می کنم هر دیدگاه و ایده ای در این زمینه دارید، با من در میان بگذارید و کامل توضیح بدهید.



سوال جالبیه اما فکر میکنم در عمل مشخص میشه.
بستگی به کاربرد داره. یوقت ممکنه کاربرد شما دو صفحه بیشتر نباشه و چنتا پیکربندی ساده داشته باشه. یوقت ممکنه صفحاتش زیاد باشه یا تنظیمات زیاد و خیلی متفاوتی داشته باشه.
من چون چنین کاری تاحالا نیازم نبوده و انجام ندادم نظری ندارم.
فقط میتونم بگم قاعدهء کلی مطلقی در خیلی موارد وجود نداره و با توجه به کاربرد و شرایط و در عمل معلوم میشه استفاده از چه روشی بهتره.
خب سادگی کد و حجم کمتر کد و ماجول وار بودن جهت امکان گسترش و تغییر و غیره، همه مزایایی هستن که بحساب میان.


2
. تا کنون مشاهده کرده ام که برای سیستم های چند زبانی از روش های مختلفی برای ذخیره جملات به زبان های مختلف استفاده می شود. مثلا در یک سیستم آن را به فرمت فایل ini ساخته بودند، در یک سیستم دیگر یک فایل PHP با همین پسوند ساخته شده بود و جملات را در متغیرهای مختلف ذخیره کرده بودند، در سیستمی دیگر یک فایل PHP با پسوند lang و یا inc یا php یا ... (میدونم که مهم نیست چه پسوندی داشته باشه) ساخته شده بود و با دستور define عبارات مختلف را مقدار دهی کرده بود، در یک سیستم دیگر نیز آرایه ای از زوج کلید و مقدار در نظر گرفته شده بود و بدین صورت آن ها را ذخیره کرده بود و در یک سیستم هم که البته ناقص آن را مرور کردم، متوجه شدم به نوعی از دیتابیس استفاده کرده است. در کل، به نظر شما کدام روش مزیت بیشتر و نقص کمتری دارد (مخصوصا از نظر بهینه بودن استفاده از منابع) و باید از آن استفاده کرد؟ ضمنا استفاده از دستور setlocale در انتهای این فایل ها زیاد دیده می شود، این دستور دقیقا چه کاری انجام می دهد؟ یعنی زبان سیستم را تغییر می دهد یا ... ؟

بسته به شرایط هرکدوم از این روشها میتونن درست و بهینه بوده باشن.
و شاید در عمل خیلی هاشون تفاوت، یعنی مزیت و عیب، خیلی متفاوتی نداشته باشن.
setlocale هم ببخشید یادم نیست؛ خب رفرنس PHP رو نگا کن دیگه :لبخند:



3
. همانطور که می دانید، در سیستم های مختلف روش های مختلفی برای ادغام PHP با HTML استفاده می شود. مثلا یکی کد HTML را بصورت عادی در فایل PHP می نویسد و فقط قسمت های بخصوصی را با PHP تولید می کند، بعضی ها کلا به PHP همه نوع کدی را می سازند، بعضی ها کلا سیستم را بر پایه OOPپایه ریزی کرده اند و از توابع مخصوص برای چاپ هر قسمت بهره می برند و ... . به نظر شما چه شیوه ای استاندارد و درست تر است؟

اینا رو فکر میکنم قبلا هم جایی پرسیده بودید.
بنظر من بستگی به گستردگی و کاربرد پروژه داره.
مسلما طراحی یک CMS با یک برنامهء سفارشی یا موردی محدود خیلی تفاوت میکنه.
طراحی کاملا ماجولار و شیء گرا هزینهء اولیهء زیادی داره؛ بنابراین در پروژه های کوچک و موردی توجیهی نداره بیایم بخاطر جمع کردن شلوغی چند خط کد و چند کارایی ساده کلی کلاس و ساختار فریمورک درست کنیم.




4. اگر چینش (alignment) زبان سیستم توسط مدیر تغییر داده شد، مثلا از فارسی بجای انگلیسی استفاده کرد، چطور باید این چینش را در تمام صفحات تغییر داد؟ در واقع چطور توسط یک تگ HTML این کار انجام شود و یا آیا از یک مقدار از قبل define شده در قسمت align هر تگ استفاده کنیم؟ یا اینکه از فایل CSS جداگانه ای برای هر دسته از زبان ها بهره ببریم؟

سوالایی میپرسی وا :لبخند:
من چه میدونم. تو میخوای برنامه بنویسی یا من؟ :عصبانی:




5. وقتی کاربری از صفحه ای به صفحه دیگر می رود، آیا session وی بسته می شود؟! پس چرا دوباره در آن صفحه باید session_start کنیم؟

بله سشن بسته میشه.
و ممکنه در صفحهء جدید نیازی به سشن قبلی نداشته باشیم و نخوایم هزینهء اینکار رو بپردازیم یا اصلا نخوایم سشن قبلی در صفحهء جدید فعال بشه.




6. تعیین login بودن یک کاربر فقط با ذخیره یک مقدار در session کافی است یا اقدام دیگری را نیز لازم دارد (مثلا ذخیره یک مقدار در DB) ؟ (غیر از login بودن همیشگی که با cookie انجام می شود.)
سشن ممکنه بصورت ظاهرا غیرقابل پیشبینی پاک بشه و باید تمهیدی برای برگرداندنش اندیشید. البته این کاریه که خیلی ها نمیدونن و یا انجام نمیدن، اما من در پروژهء رجیستر و لاگین خودم انجام دادم.




7. تنظیمات مهمی که حتما باید در فایل .htaccess موجود در folder خود وبسایت، انجام گیرد چیست؟ مثلا در مورد Query String ها و یا Hot Linking ها و ... . اگر ممکن است، خود دستور را نیز قرار دهید و ذکر کنید چطور می شود کاری کرد که این دستورات برای هر دامنه ای کار کند و نیاز به تغییر نداشته باشد؟ در صورتیکه این کار ممکن نیست، آیا باید این فایل را هنگام نصب با PHP ویرایش کنیم؟ (چگونه؟ آیا راهی هست که فقط قسمتی را تغییر دهیم یا اینکه باید کل محتویات را دوباره نویسی کنیم؟)
اینا که مستقیما مربوط به PHP نیست. مال سایت و هاست و کنترل پنل شماست.
گاهی مجبوری بصورت دستی دوباره اعمال کنی (مثلا از طریق کنترل پنل سایتت).
اما فکر میکنم بشه با PHP هم بعضیاش رو خوکار کرد. اونایی رو که به پروژه مربوط میشه و توی بقیهء سایت دخالت نمیکنه میشه بصورت خودکار درآورد.



8
. آیا معمول است که تمام توابع مورد نیاز مان را در برنامه (همچون هندل کردن خطاها، login کردن، register کردن و ...) را بصورت تابع در بیاوریم و همه آن ها را در یک فایل مثلا با نام funcs.php ذخیره کرده تا بعدا از آن ها استفاده کنیم؟
اشکالش چیه؟
شما با برنامه نویسی ساخت یافته مخالفی؟ :لبخند:




9. آیا معمول است همه محتویات صفحه index را در خود آن نگه داریم یا باید هر قسمت (مثلا login، ثبت نام، صفحات زیرین و ...) را جداگانه در فایل هایی ذخیره کرد؟ solution اصلی چیست؟
شما با ماجولار کردن مخالفی؟ :لبخند:




10. به هنگام استفاده از AJAX نیز آیا حتما باید هر قسمت را در فایل جداگانه ای ذخیره کرد؟ solution اصلی چیست؟
آیا حتما غذا رو با قاشق میخوری؟
دوست داری میتونی با دست هم بخوری.
هرجور راحتی خلاصه :لبخند:




از وقتی که می گذارید و پاسخ هایی که دقیق و شیوا بیان می کنید پیشاپیش سپاسگذارم... :قلب:


خواهش میکنم قابلی نداشت :لبخند:

LORD AELX
دوشنبه 04 مرداد 1389, 12:07 عصر
من پست اول رو ویرایش کردم که هم سوالاتی رو که واقعا نیاز دارم مطرح کرده باشم، و هم اینکه خیلی مختصر و کوتاه سوال رو پرسیده باشم.

ممنون میشم اگر پاسخ بدهید :قلب: