تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 3 از 3

نام تاپيک: آشنایی با Bll

  1. #1
    Banned B O L O T's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    (∞-∞)
    پست ها
    2,073

    پيش فرض آشنایی با Bll

    در این لایه یعنی DAL ما هیچ گونه محدویتی های سازمانی نداریم و نمی توانیم قوانینی در کل فرایند کار با داده خود اجرا کنیم .

    بطور مثال در و برای اینکه بفهمید که منظور ما چیست این مفهوم را در قالب یک مثال بیشتر توضیح می دهم.برمگردیم به جدول products شاید بنا به دلایلی ما بخواهیم اجازه تغییر فیلد CategoryID که فیلد DisContinued آنها یک است را ندهیم این کار را نباید در DAL انجام دهیم چون DAL این وظیفه را ندارد.

    یا به طور شهودی تر می خواهیم هر کسی که اعتبار سنجی شده است بتواند قدرت Delete از DataBase را داشته باشد.

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

    توجه کنید که باز هم در این لایه اگر نیاز به کار با پایگاه داده دارید حتما باید از DAL کمک بگیرید.

    بطور کلی این لایه واسطی بین لایه های DAL و Presentation است و بطور مستقل کار میکند .
    بطور کلی شما باید این لایه را در کلاس جداگانه ای درست کرده و البته VS امکانی برای ساختن ساده این کلاس به شما نمی دهد و شما باید خود کد را در این بخش بنویسید .

  2. #2
    Banned B O L O T's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    (∞-∞)
    پست ها
    2,073

    پيش فرض

    طرز ساخت BLL

    BLL ما تشکیل شده از 4 کلاس که هر کلاس بیانگر محدودیتهای در هر کدام از جداول TableAdapter ما هستند . هر کدام از این کلاسها حاوی متهای INSERT,Update وDelete هستند که این متدها حاوی قوانین و سیاستهای امنیتی مورد نیاز در برنامه شما هستند .

    اجازه دهید برای اینکه کدهای DAL و BLL را از هم جدا کرده دو فلدر App_Code یه نام BLL و DLL درست کنیم و در فلدر DAL دیتا ست خود را ریخته و در BLL کلاسهای که می خواهیم درست کنیم .

    خوب حالا در فلدرBLL کلاسهای اضافه کنید که هر کدام برای یکی از جداول شمادر دیتا ست است (productsBLL,CategoriesIBLL,SuppliersBLL,EmployesB LL)

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

    برای کلاس ProductsBLL ما 7 متد اضافه میکنیم به ترتیب زیر :

    • GetProducts()
    • GetProductByProductID(productID)
    • GetProductsByCategoryID(categoryID)
    • GetProductsBySupplier(supplierID)
    • AddProduct(productName, supplierID, categoryID, quantityPerUnit, unitPrice,
    unitsInStock, unitsOnOrder, reorderLevel, discontinued)
    • UpdateProduct(productName, supplierID, categoryID, quantityPerUnit, unitPrice,
    unitsInStock, unitsOnOrder, reorderLevel, discontinued, productID)
    • DeleteProduct(productID)

    کد ProductsBLL

    کد:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using NorthwindTableAdapters;

    [System.ComponentModel.DataObject]
    public class ProductsBLL
    {
    private ProductsTableAdapter _productsAdapter = null;
    protected ProductsTableAdapter Adapter
    {
    get
    {
    if (_productsAdapter == null)
    _productsAdapter = new ProductsTableAdapter();
    return _productsAdapter;
    }
    }
    [System.ComponentModel.DataObjectMethodAttribute(
    System.ComponentModel.DataObjectMethodType.Select, true)]
    public Northwind.ProductsDataTable GetProducts()
    {
    return Adapter.GetProducts();
    }
    [System.ComponentModel.DataObjectMethodAttribute(
    System.ComponentModel.DataObjectMethodType.Select, false)]
    public Northwind.ProductsDataTable
    GetProductByProductID(int productID)
    {
    return Adapter.GetProductByProductID(productID);
    }
    [System.ComponentModel.DataObjectMethodAttribute(
    System.ComponentModel.DataObjectMethodType.Select, false)]
    public Northwind.ProductsDataTable
    GetProductsByCategoryID(int categoryID)
    {
    return Adapter.GetProductsByCategoryID(categoryID);
    }
    [System.ComponentModel.DataObjectMethodAttribute(
    System.ComponentModel.DataObjectMethodType.Select, false)]
    public Northwind.ProductsDataTable
    GetProductsBySupplierID(int supplierID)
    {
    return Adapter.GetProductsBySupplierID(supplierID);
    }
    [System.ComponentModel.DataObjectMethodAttribute(
    System.ComponentModel.DataObjectMethodType.Insert, true)]
    public bool AddProduct(string productName,
    int? supplierID, int? categoryID, string quantityPerUnit,
    decimal? unitPrice,
    short? unitsInStock,
    short? unitsOnOrder,
    short? reorderLevel,
    bool discontinued)
    {
    // Create a new ProductRow instance
    Northwind.ProductsDataTable products =
    new Northwind.ProductsDataTable();
    Northwind.ProductsRow product = products.NewProductsRow();
    product.ProductName = productName;
    if (supplierID == null) product.SetSupplierIDNull();

    else product.SupplierID = supplierID.Value;
    if (categoryID == null) product.SetCategoryIDNull();
    else product.CategoryID = categoryID.Value;
    if (quantityPerUnit == null) product.SetQuantityPerUnitNull();
    else product.QuantityPerUnit = quantityPerUnit;
    if (unitPrice == null) product.SetUnitPriceNull();
    else product.UnitPrice = unitPrice.Value;
    if (unitsInStock == null) product.SetUnitsInStockNull();
    else product.UnitsInStock = unitsInStock.Value;
    if (unitsOnOrder == null) product.SetUnitsOnOrderNull();
    else product.UnitsOnOrder = unitsOnOrder.Value;
    if (reorderLevel == null) product.SetReorderLevelNull();
    else product.ReorderLevel = reorderLevel.Value;
    product.Discontinued = discontinued;
    // Add the new product
    products.AddProductsRow(product);
    int rowsAffected = Adapter.Update(products);
    // Return true if precisely one row was inserted,
    // otherwise false
    return rowsAffected == 1;
    }
    [System.ComponentModel.DataObjectMethodAttribute(
    System.ComponentModel.DataObjectMethodType.Update, true)]
    public bool UpdateProduct(string productName, int? supplierID,
    int? categoryID, string quantityPerUnit,
    decimal? unitPrice, short? unitsInStock, short? unitsOnOrder,
    short? reorderLevel,
    bool discontinued, int productID)
    {
    Northwind.ProductsDataTable products =
    Adapter.GetProductByProductID(productID);
    if (products.Count == 0)
    // no matching record found, return false
    return false;
    Northwind.ProductsRow product = products[0];
    product.ProductName = productName;
    if (supplierID == null) product.SetSupplierIDNull();
    else product.SupplierID = supplierID.Value;
    if (categoryID == null) product.SetCategoryIDNull();
    else product.CategoryID = categoryID.Value;
    if (quantityPerUnit == null) product.SetQuantityPerUnitNull();
    else product.QuantityPerUnit = quantityPerUnit;
    if (unitPrice == null) product.SetUnitPriceNull();
    else product.UnitPrice = unitPrice.Value;
    if (unitsInStock == null) product.SetUnitsInStockNull();
    else product.UnitsInStock = unitsInStock.Value;
    if (unitsOnOrder == null) product.SetUnitsOnOrderNull();
    else product.UnitsOnOrder = unitsOnOrder.Value;
    if (reorderLevel == null) product.SetReorderLevelNull();
    else product.ReorderLevel = reorderLevel.Value;
    product.Discontinued = discontinued;
    // Update the product record
    int rowsAffected = Adapter.Update(product);
    // Return true if precisely one row was updated,
    // otherwise false
    return rowsAffected == 1;
    }
    [System.ComponentModel.DataObjectMethodAttribute(
    System.ComponentModel.DataObjectMethodType.Delete, true)]
    public bool DeleteProduct(int productID)
    {
    int rowsAffected = Adapter.Delete(productID);
    // Return true if precisely one row was deleted,
    // otherwise false
    return rowsAffected == 1;
    }
    }

  3. #3
    Banned B O L O T's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    (∞-∞)
    پست ها
    2,073

    پيش فرض

    متدها به سادگی دیتا بر میگردانند و بصورت نسبتا مستقیم این کار را با فرخوانی DAL انجام می دهند.در حالی که در بعضی از سنارویوهای ممکن وجود داشته باشه یک سری قوانینی که شما نیاز داشته باشید و باید در اینجا آنها را پیاده سازی کنید مثل قوانین اعتیار سنجی و اینکه یک یوزر در سایت شما وارد شده یا نه.
    BLL صرفا مثل یک ------ از میان لایه presentation دسترسی ما را به دیتاهای امکان پذیر میسازد.

    تعدادی از ستونهای جداول می توانند مقدار NULL را به خود بگیرند.برای پارمترهای ورودی این ستونها در متدهای UpdateProduct و InsertProduct میتوان از نوع داده جدیدی که در .Net 2 اضافه شده استفاده کرد. این نوع داده چیزی جز nullable نیست. Nullable یک تکنیک را مهیا میکند برای اینکه مشخص کند که آیا یک مقدار میتوانند nullباشد. در C# شما میتوانید با اضافه کردن ? به بعد از نوع تایپ به کامپایلر بهفهمانید که این متغییر می تواند مقدار null داشته باشد.

    int? x;

    تمام 3 متد ما مقداری Boolean را بر میگرداند که نشان میدهد وظیفه محمول شده را به درستی انجام داده و سطری را تحت تاثیر قرار داده یا خطایی باعث بروز اشکال شده و نتوانسته کار خود را انجام دهد. به طور مثال اگر تابع DeleteProduct را با یک شماره ID صدا بزنیم به طوری که این ID اصلا وجود نداشته باشد تابع مذکور مقدار false را برمیگرداند.

    هنگاهی که میخواهیم یک محصول(product) جدید را اضافه کنیم یا یک محصول موجود را تغییر دهیم ما یک نمونه ProductsRow میسازیم .کلاس ProductsRow مشتق شده از کلاس DataRow ، ADO.NET که به صورت پیش فرض از سازنده که کم پارامتر دارد استفاده میکند.به منظور ایجاد کردن یک ProductsRow جدید ، باید اول یک نمونه ProductDataTable ایجاد کرده و سپس NewProduct را فراخوانی کنید.

    در کد دو متد Addproduct ,updateproduct ایجاد میکنیم نمونه ای از ProductsRow و پر مکنیم این آبجکت را از مقدارهای فرستاده شده.هنگامی که مقادیر نسبت داده شدند به DataColumn های DataRow چک کردن فیلده اتفاق میفتد.

    در stronglytyped DataRow که به وسیله ویژال دستدیو از نوع nullable استفاده نمیکند به همین خاطر ما از متدی به نام SetColumnNameNull() استفاده میکنیم

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •