PDA

View Full Version : لایه منطقی در معماری سه لایه چیکارس؟



na3er-faraji
شنبه 17 شهریور 1386, 08:55 صبح
با عزیمت همه برنامه نویسان به سمت معماری سه لایه ما هم برای عقب نموندن از این جمع باید هر چه سریعتر حرکت خودمونو آغاز کنیم . برای همین فعلا کمی مطالعه در این باره رو آغاز کردم . و خوب نتیجش هم بد نبوده . اما این لایه منطقی یا همون BLL کمی این وسط نامفهومه . واقعا یه نفر میتونه واسه من توضیح بده این لایه این وسط چیکارس؟ گاهی وقتا هم واسه این که بیکار نباشه یه بررسی روی داده ها هم انجام میده . که به نظر من این کار در لایه نمایش هم میتونه انجام بشه . برای این که منظورم رو بفهمید توجه شما رو به قطعه کدهایی از پروژه آقای بهروز راد جلب می کنم .

لایه نمایش


Dim obj_BLProject As New GridViewFuncBehrouzRad.BLProject
Dim IsInserted As Boolean = obj_BLProject.AddOrder(strOrganName, strPieceName, strSubPieceName, Int32.Parse(strOrderID))


لایه منطقی



Public Function AddOrder(ByVal OrganName As String, ByVal PieceName As String, ByVal SubPieceName As String, ByVal OrderID As Int32) As Boolean
Try
Dim IsInserted As Boolean = False
Dim obj_DAProject As New GridViewFuncBehrouzRad.DAProject
IsInserted = obj_DAProject.AddOrder(OrganName.Trim(), PieceName.Trim(), SubPieceName.Trim(), OrderID)
Return IsInserted
Catch ex As SqlException
Throw ex
Catch ex As Exception
Throw ex
End Try
End Function

لایه DAL


Public Function AddOrder(ByVal OrganName As String, ByVal PieceName As String, ByVal SubPieceName As String, ByVal OrderID As Int32) As Boolean
Dim Cnn As SqlConnection = Me.GetConnection()
Dim Cmd As New SqlCommand("spAddOrder", Cnn)
Cmd.CommandType = CommandType.StoredProcedure
Dim Param As SqlParameter
Param = Cmd.Parameters.Add("@organName", SqlDbType.NVarChar, 50)
Param.Value = OrganName.Trim.ToString()
Param = Cmd.Parameters.Add("@pieceName", SqlDbType.NVarChar, 50)
Param.Value = PieceName.Trim.ToString()
Param = Cmd.Parameters.Add("@subPieceName", SqlDbType.NVarChar, 50)
Param.Value = SubPieceName.Trim.ToString()
Param = Cmd.Parameters.Add("@pieceID", SqlDbType.Int)
Param.Value = OrderID
Try
Cnn.Open()
Dim intRowAffect As Int32 = Cmd.ExecuteNonQuery()
If intRowAffect > 0 Then Return True
Catch ex As SqlException
Throw ex
Catch ex As Exception
Throw ex
Finally
If (Cnn.State <> ConnectionState.Closed) Then Cnn.Close()
End Try

Return False

End Function

یک نفر به من بگه چرا لایه داده با لایه نمایش مستقیم با هم کار نمی کنن؟

mehranFX
شنبه 17 شهریور 1386, 10:07 صبح
فرض کن یه برنامه بزرگ مقیاس به شکل متداول Application داشته باشی ! زمانی سازمان تصمیم میگیره بخشهایی از این برنامه رو تحت وب توسعه بده یعنی بخشی از کارکردهای form based باید تبدیل به web based بشن ، خوب اگه دراین جا کل منطق تجاری برنامه رو در Interface گنجانده باشی ! به نوعی باید پروژه رو برای وب مجدداً باز نویسی کنی ! اما اگر منطق برنامه رو در لایه Bussiness گنجانده بودی ! فقط Interface جدید رو طراحی میکردی و تمام ! بله بقیه برنامه تو نیاز به بازنویسی نداشت و به شکلی پارامتریک Interaction های کاربر نهایی رو به لایه های زیرین منتقل میکردی ! در کتابی در زمینه معماری برنامه های سازمانی می خوندم که خیلی ساده گفته بود اگر برنامه شما تحت کنسول اجرا میشه و بدون هیچ تغییری در لایه تجاری و داده ، توانستید اون رو به یک برنامه تحت وب و بالعکس تبدیل کنید اون موقع می تونید نتیجه بگیرید که تفکیک لایه ای رو به خوبی انجام داده اید ! ( جالبه نه ؟ !!!!:لبخندساده:)
یکی دیگر از کارکردهای بسیار عالی برنامه نویسی چند لایه ، میتونه ایجاد نرم افزار های کلاینت بسیار سبک باشه و هیچ لزومی نداره که منطق پیچیده برنامه رو بر روی تمام کلاینت ها Run کنید ! منطق تجاری شما می تونی بر روی کامپیوتری دیگه و یا پلاتفرمی متفاوت از پلاتفرم کلاینت و یا منبع داده اجرا بشه بدون اینکه هیچ کدام از این لایه ها نیازی داشته باشند که از هم خبری داشته باشند یا چگونگی پیاده سازی اونها در یکدیگر تاثیری داشته باشه ! با این نگرش به راحتی میتونی برنامه رو در هر مقیاسی گسترش بدی ، تکنولوژی هایی مانند وب سرویس ها ، DeCom و یا Corba بر پایه چنین نگرشی شکل گرفتند و خوب نمی تونم تصور کنم دنیای پیرامون بدون اینها چطور می تونه بر مشکلات تکنیکی این چنینی فائق بیاد !
خوش باشی !

mehranFX
شنبه 17 شهریور 1386, 10:16 صبح
در ادامه مبحث قبلی :
در شبکه های زیر زمینی می تونی نسخه الکترونیکی اون رو پیدا کنی
Patterns of Enterprise Application Architecture
http://ec1.images-amazon.com/images/I/51X1K7R6FGL._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_.jpg (http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420/ref=pd_bbs_sr_1/105-3480709-7091624?ie=UTF8&s=books&qid=1189235710&sr=1-1)

Behrouz_Rad
شنبه 17 شهریور 1386, 11:59 صبح
قسمت آخر کدهایی که گذاشتی لایه ی DAL هست. اصلاح بفرمایید.

Behrouz_Rad
شنبه 17 شهریور 1386, 12:06 عصر
ضمن اینکه قبلا در مورد معماری 3 لایه در بخش تجزیه و تحلیل سیستم ها صحبت هایی کردم:
http://barnamenevis.org/forum/showthread.php?t=73222

موفق باشید.