PDA

View Full Version : برنامه نویسی چند لایه پوشه ای یا پروژه ای ؟



jas1387
پنج شنبه 12 فروردین 1389, 13:45 عصر
سلام دوستان

در برنامه نویسی چند لایه ( سه لایه ) بهتر است که لایه ها در پوشه های جداگانه باشند یا در پروژه های جداگانه و چرا ؟

naser2009
پنج شنبه 12 فروردین 1389, 15:03 عصر
سلام دوستان

در برنامه نویسی چند لایه ( سه لایه ) بهتر است که لایه ها در پوشه های جداگانه باشند یا در پروژه های جداگانه و چرا ؟
میتونه در پروژه های جداکانه باشه اگه میخواهی لایه ها در سرور های مختلف run بشه و گرنه لزومی نداره
در ضمن بهترین راه اینه که دو class library به نام های BLL و DAL ایجاد کنی و اونها رو به همراه یک web app یا win app در یک solution قرار بدی
سر آخر فقط دو فایل BLL ِDal داری به همراه یک پروژه

jas1387
پنج شنبه 12 فروردین 1389, 18:58 عصر
بهترین راه اینه که دو class library به نام های BLL و DAL ایجاد کنی

دوست عزیز هم منظورم همین بود اشتباه رسندم


حالا برای هر جدولی یه کلاس تعریف کنم یا این که همش توی یه کلاس باشه ؟

ezamnejad
پنج شنبه 12 فروردین 1389, 20:25 عصر
حالا برای هر جدولی یه کلاس تعریف کنم یا این که همش توی یه کلاس باشه ؟

هرچه اطلاعات مجزا باشند بهتره چون مدیریتش راحت تر میشه بهتره هر جدول توی یک کلاس باشه

naser2009
پنج شنبه 12 فروردین 1389, 20:26 عصر
دوست عزیز هم منظورم همین بود اشتباه رسندم


حالا برای هر جدولی یه کلاس تعریف کنم یا این که همش توی یه کلاس باشه ؟
نه بهتره جدا باشه
در ضمن مگه شما از class diagram استفاده نكردي (uml) كه كلاس هاتون معلوم باشه
هميشه سعي كن از روي class diagram بانك رو طراحي كني و سپس از روي بانك (به همراه روابط) برو سراغ كلاس ها.و دسته بندي اونها.
تقريبا ميشه گفت واسه هر table‌بايد يك كلاس ايجاد كني :لبخندساده:

jas1387
جمعه 13 فروردین 1389, 00:32 صبح
پس باید کانکشنم را توی یه کلاس مجزا به صورت عمومی تعریف کنم تا بهتونم توی هر کدوم از کلاس های مربوط به جدول هام ازش استفاده کنم ، درسته ؟

FastCode
جمعه 13 فروردین 1389, 01:13 صبح
پس باید کانکشنم را توی یه کلاس مجزا به صورت عمومی تعریف کنم تا بهتونم توی هر کدوم از کلاس های مربوط به جدول هام ازش استفاده کنم ، درسته ؟
بهترین روش:
thread specific singleton

#if SQLite
public static SQLiteConnection Connection
{
get
{
initCon();
return Con[Thread.CurrentThread];
}
}
#endif
#if SqlServer
public static SqlConnection Connection
{
get
{
initCon();
return Con[Thread.CurrentThread];
}
}
#endif
#if SQLite
private static Dictionary<Thread, SQLiteConnection> Con;
#endif
#if SqlServer
private static Dictionary<Thread, SqlConnection> Con;
#endif
#if SqlServer
private static void initCon()
{
if (Con == null)
{
Con = new Dictionary<Thread, SqlConnection>();
}
SqlConnection connection = null;
if (!Con.ContainsKey(Thread.CurrentThread))
{
connection = Esfand.ProfileManagement.SQLServer.GetConnection() ;
connection.Open();
Con.Add(Thread.CurrentThread, connection);
ExecuteNonQuery("USE [Esfand]", connection);
}
else
{
connection = Con[Thread.CurrentThread];
}
while (connection.State != ConnectionState.Open)
{
}
}
#endif
internal static void RefreshConnections()
{
Collection<Thread> collection = new Collection<Thread>();
foreach (Thread thread in Con.Keys)
{
if ((thread == null) || (thread.ThreadState == System.Threading.ThreadState.Stopped))
{
collection.Add(thread);
}
}
foreach (Thread thread in collection)
{
Con.Remove(thread);
}
collection.Clear();
}

#if SQLite
public static SQLiteConnection Connection
{
get
{
initCon();
return Con[Thread.CurrentThread];
}
}
#endif
#if SqlServer
public static SqlConnection Connection
{
get
{
initCon();
return Con[Thread.CurrentThread];
}
}
#endif
#if SqlServer
internal static SqlDataReader ExecuteReader(string Text)
{
initCon();
SqlCommand command = new SqlCommand(Text, Connection);
return command.ExecuteReader();
}
#endif
#if SQLite
internal static SQLiteDataReader ExecuteReader(string Text, SQLiteConnection Connection)
{
SQLiteCommand command = new SQLiteCommand(Text, Connection);
return command.ExecuteReader();
}
#endif
#if SqlServer
internal static SqlDataReader ExecuteReader(string Text, SqlConnection Connection)
{
SqlCommand command = new SqlCommand(Text, Connection);
return command.ExecuteReader();
}
#endif

ezamnejad
جمعه 13 فروردین 1389, 10:42 صبح
پس باید کانکشنم را توی یه کلاس مجزا به صورت عمومی تعریف کنم تا بهتونم توی هر کدوم از کلاس های مربوط به جدول هام ازش استفاده کنم ، درسته ؟

وقتی به صورت لایه ای برنامه می نویسید ارتباط به دیتابیس از طریق لایه Dal انجام میشه . با ذخیره کانکشن در فایل app.conig هر موقع که نیاز به ارتباط باشه میتونید با استفاده از یک متد کانکشن را از فایل config دریافت کنید .
پروژه ای که در امضای من وجود داره هم به همین روش نوشته شده میتونید ببینید امیدوارم مفید باشه.

jas1387
جمعه 13 فروردین 1389, 21:49 عصر
با ذخیره کانکشن در فایل app.conig هر موقع که نیاز به ارتباط باشه میتونید با استفاده از یک متد کانکشن را از فایل config دریافت کنید .


سلام دوست عزیز

اگه امکان داره یه خورده درباره فایل app.conig توضیح بدهید

من می خواهم برنامه ام قابلیت شبکه شدن رو داشته باشه ( یعنی می خواهم توی برنامه ام جای را در نظر بگیرم تا کاربر بتواند نام کامپیوتر سرور را وارد کند و به آن وصل شود ) آیا این فایل رو میشه ویرایش کرد ( برای کانکشن سرور )

sky_in_iran
شنبه 14 فروردین 1389, 08:11 صبح
سلام به دوستان و اساتيد گرامي
استاد FastCode (http://barnamenevis.org/forum/member.php?u=109710) ميشه درباره كدي كه گزاشتين يه توضيحي بدين ممنون ميشم .
درباره قرار دادن كانكشن در فايل config بهتر نيست اطلاعات و در كد برنامه يا در بخشي ديگر در يك فايل به صورت hash شده قرار داد چون زمان قرار دادن اطلاعات بر روي سرور كسانيكه به سرور دسترسي دارن خوب ميتونن به فايل config به راحتي دسترسي داشته باشند و بعد خوب الي آخر معلومه چي ميشه ديگه !!!
آيا امكان hash كردن اطلاعات config وجود دارد ؟
موفق باشيد

mrsalam
شنبه 14 فروردین 1389, 08:12 صبح
سلام
دوست عزیزم این برنامه که زحمتش رو کشیدین، فایل DataBase مربرط به اون ضمیمه نشده...
از کجا کی تونیم بگیریم؟

ezamnejad
شنبه 14 فروردین 1389, 15:55 عصر
سلام به دوستان و اساتيد گرامي
درباره قرار دادن كانكشن در فايل config بهتر نيست اطلاعات و در كد برنامه يا در بخشي ديگر در يك فايل به صورت hash شده قرار داد چون زمان قرار دادن اطلاعات بر روي سرور كسانيكه به سرور دسترسي دارن خوب ميتونن به فايل config به راحتي دسترسي داشته باشند و بعد خوب الي آخر معلومه چي ميشه ديگه !!!
آيا امكان hash كردن اطلاعات config وجود دارد ؟
موفق باشيد
کسی که به سرور دسترسی داره دیگه چه نیازی به اطلاعات config داره ؟ میتونه دیتابیس را مستقیما ببینه و هرکاری که میخواد انجام بده
امکان hash کردن وجود داره .

naser2009
شنبه 14 فروردین 1389, 18:30 عصر
امکان hash کردن وجود داره .
بله امکان hash کردن web.config وجود داره!

FastCode
شنبه 14 فروردین 1389, 18:43 عصر
سلام به دوستان و اساتيد گرامي
استاد FastCode (http://barnamenevis.org/forum/member.php?u=109710) ميشه درباره كدي كه گزاشتين يه توضيحي بدين ممنون ميشم .
من توی چند تا پراسیجر Cross-database برای شما گزاشتم که با اونها میتونید یه sqlserver یا sqlite وصل بشید و برای گرفتن کانکشن من از

Esfand.ProfileManagement.SQLServer.GetConnection()
استفاده کردم که توی برنامه خودم تنظیمات connection هر کاربر رو از profile اون کاربر میخونه و یه connection میده.