لایه ها از کتاب Addison Wesley: Expert C#2008 Business Objects

 

  1. لایه ی Interface: در این لایه از WPF، Web Form، Windows Forms  و سایر سایر انواع Application هایی که User دارند استفاده می شود.
  2. لایه ی Interface Control: بین Interface و Business قرار می گیرد. اطلاعات را از User می گیرد و انها را برای لایه ی Business آماده می کند و همینطور نتایج را به User برمی گرداند.
  3. Data Access: بین Business Logic و Data Access عمل می کند
  4.  Data Storage and Management: به صورت فیزیکی عملیات ایجاد، بازیابی، به روزرسانی و حذف اطلاعات از محل ذخیره سازی اطلاعات را دارد.
  5. این مدل معماری را می توان مدل های فیزیکی زیر Config کرد:
  6. ·         1 physical tier
  7. ·         2 physical tier
  8. ·         3 physical tier
  9. ·         4 physical tier
  10. ·         5 physical tier
  11.  با استفاده از Asp.net  دو نوع Application می توان ایجاد کرد که عبارتند از:
  12. ·         Web Application: به طور مستقیم از طریق اینترنت با کاربر در ارتباط هستند.
  13. ·         Web Services:یک Functionality که توسط یک Application برای یک Application دیگر ایجاد می شود.
  14.  CsC.exe در مسیر نصب دات نت قرار دارد و با استفاده از آن می توان در CommandLin فایل های با پسوند CS را کامپایل کرد.

لایه ها از کتاب Addison Wesley: Expert C#2008 Business Objects

منطبق کردن لایه های منطقی و تکنولوژی ها  

در مورد ApplicarionDomain از کتاب Microsoft 70-536

  1. معمولا Developer ها نیاز دارند که از اسمبلی های سیستم های دیگر استفاده کنند هر چند که این کار باعث کاهش کارایی استفاده از Resource ها و همچنین آسیب پذیر شدن امنیت می شود. بهترین روش برای مدیریت این ریسک ایجاد یک ApplicationDomain و فراخوانی آن اسمبلی ها از داخل این محیط Protected است. 
  2. ApplicationDomain یک فضای منطقی است که به اسمبلی های مختلف اجازه می دهد که در یک پروسس اجرا شوند اما از دسترسی مستقیم آنها به حافظه متعلق به سایر اسمبلی ها جلوگیری می کند. 
  3.  Applicationdomain چند feature را ارائه می کند که عبارتند از: 1-فضاهای حافظه جداگانه 2- دسترسی به منابع

دیتابیس از کتاب Microsoft 70-536

  1.  متد ExecuteNonQuery برای Update،Insert وDelete استفاده می شود و مقدار برگشتی آن تعداد رکوردهای تحت تاثیر قرار گرفته می باشد.

در مورد Serialization از کتاب Microsoft 70-536

  1.  در دات نت فریم ورک شما وقتی یک آبجکت ایجاد می کنید، نیاز نیست در مورد چگونگی ذخیره شدن آن در حافظه فکر کنید. دات نت فریم ورک این کار را برای شما انجام خواهد داد.
  2.  اگر بخواهید محتویات یک آبجکت را در فایل ذخیره کنبد، آبجکت را به پروسس دیگری بفرستید و یا از طریق شبکه انتقال دهید شما باید در مورد اینکه این داده ها چطور نمایش داده خواهند شد فکر کنید. زیرا نیاز دارید آن را به فرمت دیگری تبدیل کنید. این تبدیل Serialization نام دارد.
  3.  Serialization در فضای System.Runtime.Serialization قرار دارد.
  4. Serializaing فرآیند تبدیل آبجکت به یک ترتیب خطی از بایت ها است که می تواند ذخیره شود و یا انتقال داده شود.
  5. Deserializing عمل عکس عمل فوق می باشد که داده هایی که در مرحله قبل Serialize شده اند را به آبجکت تبدیل می کند.
  6.  مراحل Serialize کردن به شرح زیر می باشد:
  • §         یک آبجکت استریم برای نگهداری خروجی Serialize شده ایجاد می شود.
  • §         یک آبجکت BinaryFormatter ایجاد می شود.
  • §         متد Serialize از BinaryFormatter فراخوانی می شود برای Serialize کردن آبجکت مورد نظر.

مثالی از این Serialize کردن به شرح زیر می باشد:

String data = “This must store in a file”

FileStream fs = new FilwStream(“text.Data” , FileMode.Create)

BinaryFormatter bf = new BinaryFormatter()

Bf.Serialize(fs,data)

Fs.close();

  1.   اگر بخواهید یک جمله ساده را در یک فایل بنویسید، نیاز به Serialization نیست و بهتر است که یک فایل ایجاد کنید و جمله را مستقیماً در آن بنویسید زیرا Serialization برای ذخیره سازی اطلاعات پیچیده تر مثلا تاریخ و زمان جاری مورد استفاده قرار می گیرد.
  2.  مراحل Deserialize به شرح زیر می باشد:
  • §         ایجاد یک آبجکت استریم برای خواندن خروجی Serialize شده
  • §         ایجاد یک آبجکت BinaryFormatter
  • §         ایجاد یک آبجکت برای ذخیره سازی داده های Deserialize شده
  • §         فراخوانی متد deserialize از Binaryformatter برای Deserialize کردن آبجکت و cast کردن به تایپ صحیح است.

مثالی از Deserialize کردن در زیر آورده شده است:

FileStream fs = new FileStream(“txt.data”, FileMode.Open)

BinaryFormatter  bf = new Binaryformatter()

String data = “”

Data = (string) bf.Deserialize(fs)

Fs.close();

Console.WriteLine(data)

  1.  با قرار دادن Attribute با عنوان Serializable در بالای کلاس می توان این قابلیت را برای آن کلاس در نظر گرفت.
  2. اگر با همین Serialize شدن پیش فرض موافق باشید، نیاز به کد بیشری نمی باشد که در این صورت همه اعضای کلاس، حتی Private ها هم Serialize می شوند. برای بهتر شدن کارایی می توان Serialize شدن کل را کنترل کرد.
  3. می توان Serialize شدن اعضای خاصی از کلاس را غیرفعال کرد. به عنوان مثال اگر یکی از اعضای کلاس public decimal total باشد می توان به صورت زیر از Serialize شدن آن جلوگیری کرد:

[NonSerialized] public decimal total;

  1.  با استفاده از IDeserializationCallback.OnDeserialization(Object sender)  می توان مواردی که نباید Serialize شود مشخص می گردد که در ادامه مثالی آورده شده است:

Class x: IDeserializationCallback

{

Public int a;

.

.

.

Public x(…)

{     

aa..                

bb..               

total=price * quantity           

}     

Void IDeserializationCallback.OnDeserialization(Object sender)

{     

//after deserialization calculate total              

Total=price * quantity           

}     

}

  1.  دات نت فریم ورک دو روش برای Serialize کردن دارد که هر دو آنها IremootingFormatter را پیاده سازی کرده اند:
  • §         BinaryFormatter: این روش زمانی کارا است که آبجکت ها فقط در Application های دات نت فریم ورک مورد استفاده قرار بگیرند.
  • §         SoapFormatter: این فرمت که مبتنی بر XML: است زمانی کارا است که آبجکت ها نیاز به انتقال در شبکه دارند و یا در A[[lication هایی که مبتنی بر دات نت فریم ورک نیستند می خواهند مورد استفاده قرار بگیرند. امکان موفقیت در عبور از Fierwall ها در این روش نسبت به روش BinaryFormatter بیشتر است.

  1.  اگرچه کد نوشته شده برای BinaryFormatter و SoapFormatter مشابه است اما داده ای که با هر یک از این دو روش Serialize شده ند، با یکدیگر بسیار تفاوت دارند.
  2.  حتی زمانی که در شک هستید برای Serializable کردن کلاس، باز هم این کار را بکنید زیرا ممکن است در آینده برای شما یا برای سایر برنامه نویسان مورد نیاز باشد.
  3. عضوهایی از کلاس که محاسباتی و یا Temporary  یعنی موقتی هستند را NonSerialize قرار دهید.
  4. برای داشتن قابلیت Portability یعنی قابلیت انتقال، از SoapFormatter و برای داشتن کارایی بالاتر از BinryFormatter استفاده نمایید.
  5. برای Serialize کردن با استفاده از روش SoapFormatter همان مراحل BinaryFormatter طی شود با این تفاوت که در آن از کلاس System.Runtime.Serialization.Formatters.soap.soapformatter استفاده می شود.