PDA

View Full Version : سوال: شیوه صحیح پیاده سازی برنامه بر اساس معماری سرویس گرا



saied7468
جمعه 31 خرداد 1392, 10:40 صبح
سلام دوستان
من توی زمینه برنامه نویسی تحت وب تقریبا می شه گفت تازه کارم و تقریبا تمام نرم افزار هایی که نوشتم تحت ویندوز بوده الان یه پروژه گیرم امده که قراره تحت وب و بر اساس معماری سرویس گرا پیاده بشه از دوستانی که توی زمینه معماری سرویس گرا تجربه دارن می خوام که یه نگاه به شیوه پیاده سازی من بکنن و اگه این شیوه غلط هست راهنماییم کنن :

من برای انجام تمامی عملیات های روتن مثل جستجو ، درج ، ویرایش و حذف از Store Procdure استفاده می کنم .

روش کار :
دو پروژه می سازم یکی WebApplication و WebService :
در WebService :
به ازای هر بخش در برنامه یک کلاس ایجاد و توابع مربوط به آن بخش را در کلاس قرار می دم . مثلا اگر برنامه دو بخش مدیریت مشتریان و مدیریت کالا داشته باشه به ازای هر کدام یک کلاس ایجاد می شه .
در هر کلاس با توجه به نوع کار (درج ، ویرایش ، حذف ) تعدادی کد نوشته می شه :


private SqlCommand cmd;
private SqlConnection con;
private SqlDataAdapter da;
private DataTable dt;
public string DoCommand(string sp, int num1, float num2, int num3,int num4,int num5 ,int num6, string server, string user, string pass, string bank)
{
try
{
con = new SqlConnection();
con.ConnectionString = "Data Source=" + server + ";initial catalog=" + bank + " ;User ID =" + user + " ;Password=" + pass + ";";
con.Open();
if (sp == "MWasinst")
{
da = new SqlDataAdapter(sp, con);
dt = new DataTable();
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add("@name_furn", num1);
da.SelectCommand.Parameters.Add("@lit_ManagementWaste", num2);
da.SelectCommand.Parameters.Add("@waste_ManagementWaste", num3);
da.SelectCommand.Parameters.Add("@year_ManagementWaste", num4);
da.SelectCommand.Parameters.Add("@mount_ManagementWaste", num5);
da.SelectCommand.Parameters.Add("@day_ManagementWaste", num6);

da.Fill(dt);
}
if (sp == "MWasUp")
{
da = new SqlDataAdapter(sp, con);
dt = new DataTable();
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add("@id", num1);
da.SelectCommand.Parameters.Add("@lit_ManagementWaste", num2);
da.SelectCommand.Parameters.Add("@waste_ManagementWaste", num3);
da.SelectCommand.Parameters.Add("@year_ManagementWaste", num4);
da.SelectCommand.Parameters.Add("@mount_ManagementWaste", num5);
da.SelectCommand.Parameters.Add("@day_ManagementWaste", num6);

da.Fill(dt);
}
if (sp == "MWasDl")
{
da = new SqlDataAdapter(sp, con);
dt = new DataTable();
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add("@iddata", num1);

da.Fill(dt);
}
con.Close();
return "ok";
}
catch
{
return "error";
}


}



و برای عملیات های کلی (جستجو ) که در همه فرم ها مشترک هست یک کلاس ایجاد می شه :


[WebMethod]

public DataTable SelectAllData(string sp, string server, string user, string pass, string bank)
{
DataTable dt = new DataTable("MyDb");

try
{
con = new SqlConnection();
con.ConnectionString = "Data Source=" + server + ";initial catalog=" + bank + " ;User ID =" + user + " ;Password=" + pass + ";";
con.Open();
da = new SqlDataAdapter(sp, con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.Fill(dt);
con.Close();
return dt;
}
catch
{
dt = new DataTable();

return dt;
}
}


و در نهایت در WebApplication سرویس رو به پروژه اضافه می کنم و از توابع در هر بخش استفاده می کنم .

سوالات :

1-آیا شیوه پیاده سازی من براساس معماری سرویس گرا درسته ؟ فقط کافی هست که یه سرویس مثل توضیحات بالا بسازم و استفاده کنم ؟

2- با توجه به اینکه دارم از Store Procedure استفاده می کنم اگه کاربر رو قبل از هر درخواست احراز هویت کنم برای امنیت کفایت می کنه یا اینکه تمامی داده های ارسالی از WebApplication به WebService مانند نام Store Procedure باید رمز شوند و در WebService رمز گشایی شوند ؟

باتشکر

fakhravari
پنج شنبه 06 تیر 1392, 11:32 صبح
بايد خروجي ديتاست داشته باشيد.
انكريپت كردن بسته به كارت داره.

saied7468
پنج شنبه 06 تیر 1392, 13:56 عصر
سلام
اگه به جای دیتا تیبل از دیتا ست استفاده بشه این روشی که پیاده کردم درسته ؟

یه سوال دیگه هم اینکه چرا دیتاست آخه دیتا تیبل برای برگردوندن نتیجه مثلا جستجو کافیه ؟

ret_ie
یک شنبه 23 تیر 1392, 17:32 عصر
آقا منم مثل خودت تجربه عمدم تو ویندوز اپلیکیشنه و تو وب تازه کارم. اما واسه این چیزی که گفتی چه نیازیه وب سرویس بسازی؟
خوب هر کجا خواستی متد SelectAllData رو فرخوانی کن دیگه. اینکه تو چند فرم مشترکا از این متد استفاده میکنی دلیل نمیشه که بری سراغ وب سرویس. وب سرویس وقتی مناسبه که از چندین وب اپلیکیشن بخوای به یه متد دسترسی داشته باشی. اونم فقط بصورت Black Box. نه اینکه از چند فرم تو یک وب اپلیکیشن بخوای یه متد رو که خودت نوشتی صدا بزنی.
نمی دونم واضح گفتم یا نه، به نظرم میتونی راحت تر پیش بری.