مشاهده دست آورد نظرسنجی: آیا مطالعه ی مطالب این تاپیک برای شما مفید بوده است؟

رای دهنده
39. شما نمی توانید در این رای گیری رای بدهید
  • بله

    37 94.87%
  • خیر

    2 5.13%
صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 64

نام تاپیک: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP.NET

  1. #1
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    Lightbulb آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP.NET

    در این تاپیک با طراحی و توسعه ی یک فروشگاه اینترنتی بر پایه ی مدل چند لایه در ASP.NET آشنا خواهید شد. پیش از هر چیز خاطر نشان می کنم که آموزش های ارائه شده در این تاپیک بر پایه ی مطالعه منابع مختلف و تجربیات شخصی من بوده و ممکن است بهترین راه برای پیاده سازی یک فروشگاه اینترنتی بر پایه ی مدل چند لایه نباشد. با این وجود روشی کارآمد است که می توانید در اکثر پروژه های کوچک و متوسطی که قصد انجام آن را دارید به کار گیرید.

    در ابتدا شما با مفهوم اولیه ی مدل توسعه ی چند لایه آشنا خواهید شد (در صورتی که با این مفهوم آشنایی دارید می توانید از مطالعه ی آن صرف نظر کنید) و سپس به صورت گام به گام شروع به طراحی و پیاده سازی یک فروشگاه اینترنتی با امکانات ابتدایی، در ASP.NET خواهیم کرد. در ادامه به توسعه ی آن خواهیم پرداخت و امکانات بیشتری به آن خواهیم افزود.

    بخش اعظمی از مطالب و کدهای این تاپیک برگرفته از مجموعه مقالاتی است که در وب سایت imar.spaanjaars.com به آموزش ساخت نرم افزار های چند لایه مبتنی بر وب می پردازد. برای مطالعه ی بیشتر می توانید به آدرس های زیر مراجعه کنید:

    آخرین ویرایش به وسیله clover : دوشنبه 05 فروردین 1392 در 17:30 عصر




  2. #2
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    فهرست مطالب

    رزرو برای فهرست مطالب
    آخرین ویرایش به وسیله clover : دوشنبه 05 فروردین 1392 در 17:33 عصر

  3. #3
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    مقدمه

    توسعه ی نرم افزار به صورت لایه ای و یا به عبارت دیگر چند لایه به مدل توسعه ای اشاره دارد که در آن وظایف نرم افزار به بخش های مختلفی از جمله بخش کار با داده ها و پایگاه های داده، بخش منطق برنامه، اعتبار سنجی و امنیت داده ها و بخش نمایش داده ها و رابط کاربری تقسیم بندی شده و کد های مربوط به هر بخش از یک دیگر جدا می شوند. این جداسازی می تواند به صورت منطقی (با استفاده از فضاهای نام) باشد که اصطلاحا به هر بخش یک Layer گفته می شود و یا می تواند به صورت فیزیکی (با استفاده از فایل های مجزا) باشد که در این حالت اصطلاحا به هر بخش یک Tier گفته می شود.

    در حالت کلی می توان وظایف یک نرم افزار مبتنی بر دیتابیس یا Database Driven (نرم افزار هایی که در وب با آن ها سر و کار داریم اغلب از این نوع هستند) را به سه بخش مجزا (سه لایه) تقسیم بندی کنیم:

    1. بخش نمایش داده ها یا Presentation (ارتباط با کاربر یا User Interface)
    2. بخش منطق تجاری برنامه (اعتبار سنجی داده ها، امنیت و ...) یا Business Logic
    3. بخش دسترسی به داده ها یا Data Access


    در برخی مقالات دیتابیس و روال های ذخیره شده ی آن (Stored Procedures) نیز به عنوان لایه ی چهارم در نظر گرفته می شوند که چندان صحیح به نظر نمی رسد.

    برای فهم هر چه بهتر مطالب شرح داده شده در بالا، به شکل زیر دقت کنید:


    در شکل بالا فرآیند کلی نمایش داده های دیتابیس برای کاربر در مدل سه لایه شرح داده شده است. در این مدل، وب سایت نقش لایه ی نمایش یا Presentation را ایفا می کند. لایه ی منطق تجاری برنامه که به صورت مختصر Business Logic Layer) BLL) خوانده می شود، در واقع پلی است بین لایه ی نمایش و لایه ی دسترسی به داده ها که اختصارا Data Access Layer) DAL) خوانده می شود و وظیفه تعامل با دیتابیس و اجرای عملیات چهار گانه ی خواندن، افزودن، ویرایش و حذف داده ها را بر عهده دارد.

    یکی از اهداف چنین طراحی این است که ما بتوانیم ساختار هر لایه را به صورت جداگانه تغییر دهیم بدون اینکه نیازی به تغییر ساختار بقیه لایه ها باشد. به طور مثال ممکن است بخواهیم در سیستمی که بر اساس بانک اطلاعاتی MS SQL SERVER ساخته شده است تغییری ایجاد کنیم که بتواند از بانک اطلاعاتی MS Access استفاده کند. در این حالت اگر مدل سه لایه را به خوبی پیاده کرده باشیم می توانیم تنها با جایگزین کردن لایه ی DAL جدید و بدون دستکاری بقیه لایه ها این کار را انجام دهیم. در حالتی که منظور ما از لایه، لایه ی فیزیکی (Tier) باشد، این کار به سادگی تعویض یک فایل DLL خواهد بود.

    در دیاگرام بالا شما شاهد فرآیندی هستید که طی 6 مرحله اتفاق می افتد:

    1. لایه ی Presentation از لایه ی Business Logic تقاضای داده هایی را می کند.
    2. لایه ی Business Logic در صورت نیاز بررسی هایی را بر روی این درخواست انجام داده (به طور مثال اینکه آیا کاربر جاری اجازه دسترسی به داده های درخواست شده را دارد یا نه) و در صورت معتبر بودن، درخواستی را برای دریافت داده های مورد نظر به لایه ی Data Access ارسال می کند.
    3. لایه ی Data Access به دیتابیس متصل شده و به دنبال رکورد یا رکورد های درخواست شده می گردد.
    4. در صورت وجود، رکورد یا رکورد های مورد نظر به لایه Data Access برگردانده می شوند.
    5. لایه ی Data Access این رکورد یا رکوردها را در قالب یک شی یا لیستی از اشیا به لایه ی Business Logic ارسال می کند. این اشیا که غالبا Business Objects یا Business Entities نامیده می شوند، در واقع ابزاری برای تبادل داده ها در بین لایه های مختلف هستند.
    6. در نهایت لایه ی Business Logic داده ها را به لایه ی Presentation باز می گرداند. جایی که می توانند از طریق یک صفحه ی وب به کاربر نمایش داده شوند.
    آخرین ویرایش به وسیله clover : دوشنبه 05 فروردین 1392 در 17:32 عصر

  4. #4
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    گام اول: تحلیل

    سناریو
    یک فروشگاه اینترنتی وب سایتی است که از یک سو امکان معرفی و فروش محصولات را برای مدیران فروشگاه و از سوی دیگر امکان نمایش و خرید محصولات را برای مشتریان فراهم می کند. این وب سایت می تواند خدمات و امکانات زیادی را به مدیران و خریداران محصولات ارائه دهد با این حال فروشگاه مورد نظر ما در ساده ترین حالت باید شامل امکان معرفی و مدیریت محصولات و همچنین مدیریت سفارشات برای مدیران سایت باشد. همچنین باید شامل امکان نمایش محصولات و خرید آن ها از طریق اضافه کردن به سبد خرید و ثبت سفارش برای مشتریان محصولات وب سایت باشد.

    در این آموزش ما قصد داریم یک فروشگاه اینترنتی را بر پایه ی مدل توسعه ی سه لایه و در محیط ASP.NET طراحی و ایجاد کنیم. سیستم مدیریت پایگاه داده ی مورد استفاده در این پروژه MS SQL SERVER بوده و برای ارتباط با پایگاه داده از ADO.NET استفاده خواهیم کرد. در این راه از مدل فرآیندی شبیه به مدل افزایشی استفاده خواهیم کرد. با این حال به دلیل اینکه این آموزش بیشتر بر پیاده سازی فروشگاه اینترنتی مورد نظر تاکید دارد، از جزییات مربوط به تحلیل، مدل سازی و تا حدودی هم طراحی صرف نظر شده است و فقط تا آن اندازه که نیاز بوده است به آن ها پرداخته شده است.

    نیازمندی های کاربران
    پیش از هر چیز باید نیازمندی های کاربران یک وب سایت فروشگاه اینترنتی را شناسایی کنیم. به دلیل تغییر نیازمندی ها در طول زمان و افزوده شدن نیازمندی های جدید، این کار در طول پروژه ممکن است چندین بار تکرار شود.
    با توجه به این که این یک تاپیک آموزشی بوده و شخص یا شرکت خاصی این سیستم را سفارش نداده است نیازمندی های کلی کاربران یک فروشگاه اینترنتی را در نظر گرفته و به اختیار بعضی از آنها را در این مرحله از کار برای شروع انتخاب خواهیم کرد:

    • مدیران فروشگاه باید بتوانند محصولات مورد نظر خود را به همراه جزییات هر محصول به فروشگاه اضافه کرده و مدیریت کنند. مدیریت محصولات شامل مشاهده ی لیست محصولات به صورت کلی یا به صورت شاخه بندی، امکان جستجوی یک محصول خاص بر اساس نام محصول، امکان ویرایش جزییات و یا حذف یک محصول خاص می باشد. جزییات محصول شامل ویژگی های کلی مربوط به محصولات از قبیل نام محصول، قیمت، وزن، عکس و ... و همچنین ویژگی هایی مربوط به صفحه ای که محصول در آن نمایش داده می شود از قبیل عنوان صفحه، کلمات کلیدی، توضیحات صفحه و... می باشد.
    • مدیران فروشگاه باید بتوانند محصولات فروشگاه را شاخه بندی کنند. برای این منظور مدیران فروشگاه باید قادر باشند شاخه های مورد نظر خود را به همراه جزییات هر شاخه ایجاد کرده و مدیریت نمایند. همچنین باید بتوانند محصولات را به این شاخه ها اضافه کرده یا حذف نمایند. مدیریت شاخه ها شامل مشاهده ی لیست شاخه ها، امکان ویرایش جزییات و یا حذف یک شاخه ی خاص می باشد. جزییات شاخه شامل نام شاخه و همچنین عنوان، کلمات کلیدی و توضیحات صفحه ای که محصولات مربوط به آن شاخه در آن نمایش داده خواهند شد می باشد.
    • مدیران فروشگاه باید قادر باشند سفارشات ثبت شده توسط کابران را مشاهده و مدیریت نمایند. مدیریت سفارشات شامل ویرایش جزییات سفارش، تغییر وضعیت ارسال و یا پرداخت سفارش و همچنین حذف یک سفارش خاص می باشد. همچنین مدیران باید قادر باشند یک گزارش کلی از تعداد و مبلغ سفارشات به صورت تفکیک شده بر اساس وضعیت ارسال و وضعیت پرداخت و همچنین تعداد و مبلغ کل را مشاهده نمایند.
    • مدیران باید قادر باشند پیام های ارسالی کاربران را مشاهده نموده و یا حذف نمایند.
    • مشتریان باید قادر باشند لیست محصولات فروشگاه را به صورت کلی و یا به تفکیک شاخه بندی به همراه عکس و قیمت مشاهده نمایند. همچنین باید قادر باشند تا جزییات مربوط به یک محصول خاص را مشاهده نمایند.
    • مشتریان باید قادر باشند محصولات مورد نظر خود را به سبد خرید اضافه کرده، تعداد آن را ویرایش کرده و یا از سبد خرید خود حذف نمایند. همچنین باید قادر باشند این محصولات را سفارش داده و از طریق کد رهگیری وضعیت سفارش خود را بررسی نمایند.
    • مشتریان باید قادر باشند برای ارتباط با مدیران فروشگاه پیام های خود را به مدیران فروشگاه ارسال نمایند.


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

    در این حالت نمودار ER ما فقط یک موجودیت به نام Product خواهد داشت که دارای صفات خاصه ی زیر است:

    Id: شناسه ی محصول
    Name: نام محصول
    Title: عنوان صفحه ای که محصول در آن نمایش داده خواهد شد
    MetaDescription: توضیحات متای صفحه ای که محصول در آن نمایش داده خواهد شد
    MetaKeywords: کلمات کلیدی متای صفحه ای که محصول در آن نمایش داده خواهد شد
    Content: محتوای صفحه ای که محصول در آن نمایش داده خواهد شد
    Price: قیمت محصول
    Weight: وزن محصول
    SerialNumber: شماره سریال محصول
    CreateDate: تاریخ افزودن محصول به فروشگاه

    به دلایلی که قبلا ذکر شد و همچنین سادگی سیستم در این نقطه، از پرداختن به سایر نمودار ها خودداری خواهیم کرد.
    آخرین ویرایش به وسیله clover : سه شنبه 06 فروردین 1392 در 06:38 صبح

  5. #5
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    گام دوم: ایجاد پایگاه داده

    در این پروژه از پایگاه داده ی پیش فرضی که توسط ASP.NET Configuration در پوشه ی App_Data ایجاد خواهد شد استفاده نخواهیم کرد بلکه به صورت دستی نسبت به ایجاد و آماده سازی پایگاه داده مورد نظر برای استفاده در پروژه اقدام خواهیم کرد.

    معمولا همراه با نصب ویژوال استودیو یک نسخه ی آزمایشی و رایگان از MS SQL Server با پسوند Express بر روی سیستم شما نصب می شود. در صورتی که در هنگام نصب ویژوال استودیو تیک مربوط به نصب MS SQL Server Express را برداشته اید می توانید از طریق نصاب ویژوال استودیو آن را نصب نمایید. ما قصد داریم بانک اطلاعاتی مورد نظر خود را با استفاده از ابزار Server Explorer موجود در ویژوال استودیو بر روی این نصب از MS SQL Server ایجاد نماییم.

    تذکر: در این تاپیک از نسخه ی 2012 نرم افزار ویژوال استودیو استفاده خواهیم کرد. در صورتی که از نسخه های قدیمی تر ویژوال استودیو استفاده می کنید ممکن است نیاز داشته باشید در مطالب گفته شده کمی تغییر ایجاد نمایید.

    ویژوال استودیو را باز کرده و از پنجره ی Server Explorer بر روی گزینه ی Data Connections کلیک راست کرده و از منوی ظاهر شده گزینه ی Create New SQL Server Database را انتخاب کنید.


    در پنجره ی ظاهر شده در قسمت Server name مقدار sqlexpress\. که همان آدرس سرور MS SQL Server Express است را وارد نمایید. همچنین در قسمت New database name مقدار db_eShop را وارد نمایید. این نام پایگاه داده ای است که برای این پروژه قصد ایجاد آن را داریم.


    سپس بر روی دکمه ی OK کلیک کنید تا پایگاه داده ی مورد نظر ما ایجاد شده و به لیست پایگاه های داده ی موجود در پنجره ی Server Explorer اضافه شود.


    بر روی مثلث کوچک کنار نام دیتابیس کلیک کرده تا زیر شاخه های دیتابیس ظاهر شود. سپس بر روی شاخه ی Tables کلیک راست کرده و گزینه ی Add New Table را انتخاب نمایید.


    در پنجره ی ظاهر شده فیلد های مورد نظر را مطابق شکل زیر وارد کرده و سپس جدول مورد نظر را با نام eshop_Products ذخیره کنید. دقت کنید که فیلد Id کلید اصلی این جدول می باشد. همچنین فیلد CreateDate مقدار پیش فرض خود را از تابع ()getdate دریافت می نماید.


    حال نوبت به ایجاد روال های ذخیره شده (Stored Procedures) می رسد. در این قسمت پنج روال ذخیره شده زیر را برای انجام عملیات انتخاب لیست محصولات، انتخاب یک محصول خاص و ایجاد، ویرایش و حذف یک محصول خاص، ایجاد خواهیم کرد. برای این منظور بر روی شاخه ی Stored Procedures کلیک راست کرده و گزینه ی Add New Stored Procedure را انتخاب کنید.


    در پنجره ی ظاهر شده دستورات زیر را وارد کرده و دکمه ی Update (در نسخه های قدیمی تر دکمه ی Execute) را کلیک کنید تا روال ذخیره شده ی مورد نظر ایجاد شود.

    روال ذخیره شده ی انتخاب لیست محصولات:
    CREATE PROCEDURE [dbo].[eshop_Products_SelectAll]
    AS
    SELECT Id,
    Name,
    Title,
    MetaDescription,
    MetaKeywords,
    Content,
    Price,
    [Weight],
    SerialNumber,
    CreateDate

    FROM dbo.eshop_Products

    ORDER BY CreateDate DESC
    RETURN 0

    برای چهار روال دیگر نیز به همین شکل عمل کرده و دستورات زیر را وارد کنید.

    روال ذخیره شده ی انتخاب محصول:
    CREATE PROCEDURE [dbo].[eshop_Products_SelectItem]
    @Id UNIQUEIDENTIFIER
    AS
    SELECT Id,
    Name,
    Title,
    MetaDescription,
    MetaKeywords,
    Content,
    Price,
    [Weight],
    SerialNumber,
    CreateDate

    FROM dbo.eshop_Products

    WHERE Id = @Id
    RETURN 0

    روال ذخیره شده ی افزودن محصول:
    CREATE PROCEDURE [dbo].[eshop_Products_InsertItem]
    @Id UNIQUEIDENTIFIER,
    @Name NVARCHAR(50),
    @Title NVARCHAR(50),
    @MetaDescription NVARCHAR(300),
    @MetaKeywords NVARCHAR(800),
    @Content NVARCHAR(MAX),
    @Price MONEY,
    @Weight INT,
    @SerialNumber NVARCHAR(50)

    AS
    INSERT dbo.eshop_Products
    (
    Id,
    Name,
    Title,
    MetaDescription,
    MetaKeywords,
    Content,
    Price,
    [Weight],
    SerialNumber
    )
    VALUES
    (
    @Id,
    @Name,
    @Title,
    @MetaDescription,
    @MetaKeywords,
    @Content,
    @Price,
    @Weight,
    @SerialNumber
    )
    RETURN 0


    روال ذخیره شده ی ویرایش محصول:
    CREATE PROCEDURE [dbo].[eshop_Products_UpdateItem]
    @Id UNIQUEIDENTIFIER,
    @Name NVARCHAR(50),
    @Title NVARCHAR(50),
    @MetaDescription NVARCHAR(300),
    @MetaKeywords NVARCHAR(800),
    @Content NVARCHAR(MAX),
    @Price MONEY,
    @Weight INT,
    @SerialNumber NVARCHAR(50)

    AS
    UPDATE dbo.eshop_Products

    SET Id = @Id,
    Name = @Name,
    Title = @Title,
    MetaDescription = @MetaDescription,
    MetaKeywords = @MetaKeywords,
    Content = @Content,
    Price = @Price,
    [Weight] = @Weight,
    SerialNumber = @SerialNumber

    WHERE Id = @Id
    RETURN 0

    روال ذخیره شده ی حذف محصول:
    CREATE PROCEDURE [dbo].[eshop_Products_DeleteItem]
    @Id UNIQUEIDENTIFIER

    AS
    DELETE dbo.eshop_Products
    WHERE Id = @Id
    RETURN 0
    آخرین ویرایش به وسیله clover : دوشنبه 05 فروردین 1392 در 17:25 عصر

  6. #6
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    گام سوم: ایجاد موجودیت های داده ای

    موجودیت های داده ای به زبان ساده کلاس هایی هستند که از اشیا ساخته شده از آن ها برای ارسال داده ها در بین لایه های مختلف نرم افزار استفاده می شود. در حقیقت داده هایی که باید بین لایه های مختلف جا به جا شوند در قالب اشیایی از این کلاس ها بسته بندی می شوند. به طور مثال داده های مربوط به یک محصول که در لایه ی Presentation از طریق وب فرم ها برای ذخیره در پایگاه داده از کاربر دریافت می شوند در قالب یک شی از نوع Product به لایه ی Business Logic ارسال می شوند.

    این موجودیت ها، برای نظم و خوانایی بیشتر نرم افزار اغلب در یک فضای نام جداگانه یا حتی در یک پروژه ی جداگانه تعریف می شوند.

    در اولین قدم در ویژوال استودیو یک Solution ایجاد خواهیم کرد. این Solution در ادامه برای نگهداری کلیه پروژه های مورد نیاز و همچنین وب سایت فروشگاه اینترنتی مورد استفاده قرار خواهد گرفت.
    ویژوال استودیو را باز کرده و از منوی File گزینه ی New Project را انتخاب کنید.


    در پنجره ی ظاهر شده مطابق شکل زیر زبان برنامه نویسی را #C و نوع پروژه را Class Library انتخاب کنید. در قسمت Name مقدار BusinessEntities را وارد کرده و در قسمت Solution name مقدار eShop را وارد نمایید. سپس بر روی دکمه ی OK کلیک کنید تا Solution و همچنین پروژه ی مورد نظر ایجاد شود.


    پس از ایجاد Solution پنجره ی Solution Explorer شما باید مانند شکل زیر باشد:


    بر روی پروژه ی BusinessEntities کلیک راست کرده و گزینه ی Properties را انتخاب نمایید. در پنجره ی ظاهر شده در تب Application در قسمت Default namespace مقدار eShop.BusinessEntities را وارد کرده و بر روی دکمه ی Save کلیک نمایید.

    در ابتدا کلاس پیشفرضی که همراه با پروژه ی BusinessEntities و با نام Class1.cs ایجاد شده است را حذف خواهیم کرد. سپس اولین Business Entity خود را با نام Product ایجاد خواهیم کرد. در حال حاضر فقط به همین یک موجودیت نیاز خواهیم داشت.

    بر روی Class1.cs کلیک راست کرده و گزینه ی Delete را انتخاب نمایید و در پنجره ی ظاهر شده گزینه ی OK را کلیک کنید. سپس بر روی پروژه ی BusinessEntities کلیک راست کرده و از بخش Add گزینه ی New Item را انتخاب نمایید.


    در پنجره ی ظاهر شده نوع فایل را Class انتخاب کرده و نام آن را Product قرار دهید و بر روی گزینه ی Add کلیک کنید سپس کد های کلاس Product را به شکل زیر ویرایش کنید:
    using System;
    using System.ComponentModel;

    namespace eShop.BusinessEntities
    {
    [DataObject]
    public class Product
    {
    [DataObjectField(true, false, false)]
    public Guid Id { get; set; }

    [DataObjectField(false, false, false)]
    public string Name { get; set; }

    [DataObjectField(false, false, false)]
    public string Title { get; set; }

    [DataObjectField(false, false, true)]
    public string MetaDescription { get; set; }

    [DataObjectField(false, false, true)]
    public string MetaKeywords { get; set; }

    [DataObjectField(false, false, true)]
    public string Content { get; set; }

    [DataObjectField(false, false, false)]
    public decimal Price { get; set; }

    [DataObjectField(false, false, false)]
    public int Weight { get; set; }

    [DataObjectField(false, false, false)]
    public string SerialNumber { get; set; }

    [DataObjectField(false, false, false)]
    public DateTime CreateDate { get; set; }
    }
    }
    آخرین ویرایش به وسیله clover : دوشنبه 05 فروردین 1392 در 17:15 عصر

  7. #7
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    گام چهارم: ایجاد لایه ی Data Access

    در این مرحله یک پروژه ی دیگر از نوع Class Library برای نگهداری کلاس های لایه ی Data Access نرم افزار خود ایجاد خواهیم کرد.

    از پنجره Solution Explore بر روی Solution خود راست کلیک کرده و از بخش Add گزینه ی New Project را انتخاب کنید.


    در پنجره ی ظاهر شده نوع پروژه را Class Library و نام آن را DataAccess بگذارید. پس از ایجاد پروژه، از قسمت Properties، فضای نام پیشفرض پروژه را به eShop.DataAccess تغییر دهید. سپس فایل Class1.cs را حذف کنید.

    از آنجایی که این پروژه در واقع نقش لایه Data Access را ایفا می کند نیاز داریم به بانک اطلاعاتی دسترسی داشته باشیم. بنابر این به یک Connection String نیاز خواهیم داشت. با این حال اگر بخواهیم آن را مستقیما در این پروژه تعریف کنیم در صورتی که نیاز به تغییر آن داشته باشیم باید مجددا پروژه را کامپایل کرده و خروجی بگیریم. برای انعطاف بیشتر، Connection String مورد نظر را از طریق کلاس ConfigurationManager دریافت خواهیم کرد. این کلاس امکان دسترسی به تنظیمات نرم افزار را برای ما فراهم می کند. در وب سایت ها این تنظیمات در فایل هایی با پسوند config قرار می گیرند. در واقع ما از Connection String تعریف شده در فایل Web.config استفاده خواهیم کرد و از آنجایی که ممکن است چند Connection String در این فایل تعریف شده باشد نام آن را در یک Property با نام ConnectionStringName در App Settings که در همان فایل Web.config قرار دارد نگهداری خواهیم کرد. در هنگام ایجاد وب سایت در این مورد بیشتر توضیح داده خواهد شد.
    با توجه به توضیحات بالا پیش از هر چیز برای دسترسی به کلاس ConfigurationManager باید یک ارجاع به اسمبلی System.Configuration بدهیم. برای این منظور بر روی پروژه ی DataAccess کلیک راست کرده و گزینه ی Add Reference را انتخاب کنید.


    در پنجره ی ظاهر شده از قسمت Assemblies بر روی گزینه ی Framework کلیک کرده و از لیست ظاهر شده System.Configuration را انتخاب کرده و دکمه ی OK را کلیک نمایید.


    سپس یک کلاس جدید با نام AppConfiguration ایجاد کرده و محتویات آن را به این شکل تغییر دهید:
    using System;
    using System.Configuration;

    namespace eShop.DataAccess
    {
    public static class AppConfiguration
    {
    public static string ConnectionString
    {
    get
    {
    return ConfigurationManager.ConnectionStrings[AppConfiguration.ConnectionStringName].ConnectionString;
    }
    }
    public static string ConnectionStringName
    {
    get
    {
    return ConfigurationManager.AppSettings["ConnectionStringName"];
    }
    }
    }
    }

    حال نوبت به ایجاد کلاس ProductRepository می رسد. این کلاس وظیفه ارتباط با دیتابیس برای انجام عملیات مرتبط با محصولات را بر عهده دارد. این عملیات شامل گرفتن لیست محصولات، گرفتن یک محصول خاص و اضافه، ویرایش و یا حذف یک محصول خاص می باشد. برای هر کدام از عملیات نام برده شده یک تابع در این کلاس تعریف خواهیم کرد. همچنین توابع دیگری نیز برای انجام عملیات داخلی کلاس تعریف خواهیم کرد. از آنجایی که ورودی یا خروجی های این توابع معمولا موجودیت های داده ای ما می باشند باید یک ارجاع به پروژه ای که این موجودیت ها در آن تعریف شده اند (پروژه ی BusinessEntities) بدهیم تا بتوانیم از آنها دراین پروژه استفاده کنیم. مجددا از گزینه ی Add Reference استفاده کرده و در پنجره ی ظاهر شده این بار از قسمت Solution بر روی Projects کلیک کرده و از لیست ظاهر شده پروژه ی BusinessEntities را تیک زده و دکمه ی OK را کلیک کنید.

    از آنجایی که در آینده نیازی به ایجاد نمونه از این کلاس نخواهیم داشت و فقط نیاز به استفاده از توابع آن داریم، کلاس و کلیه توابع مورد نظر را از نوع static تعریف می کنیم.

    کلاس ProductRepository را ایجاد کرده و محتویات آن را به این شکل ویرایش کنید:
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;

    using eShop.BusinessEntities;

    namespace eShop.DataAccess
    {
    public static class ProductRepository
    {
    public static List<Product> GetList()
    {
    List<Product> products = new List<Product>();

    using (SqlConnection sqlConnection = new SqlConnection(AppConfiguration.ConnectionString))
    {
    SqlCommand sqlCommand = new SqlCommand("eshop_Products_SelectAll", sqlConnection);
    sqlCommand.CommandType = CommandType.StoredProcedure;

    sqlConnection.Open();
    using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
    {
    if (sqlDataReader.HasRows)
    while (sqlDataReader.Read())
    products.Add(GedDataRecod(sqlDataReader));

    sqlDataReader.Close();
    }
    sqlConnection.Close();
    }

    return products;
    }
    public static Product GetItem(Guid id)
    {
    Product product = null;

    using (SqlConnection sqlConnection = new SqlConnection(AppConfiguration.ConnectionString))
    {
    SqlCommand sqlCommand = new SqlCommand("eshop_Products_SelectItem", sqlConnection);
    sqlCommand.CommandType = CommandType.StoredProcedure;

    sqlConnection.Open();
    using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
    {
    if (sqlDataReader.HasRows && sqlDataReader.Read())
    product = GedDataRecod(sqlDataReader);

    sqlDataReader.Close();
    }
    sqlConnection.Close();
    }

    return product;
    }
    public static void AddItem(Product product)
    {
    using (SqlConnection sqlConnection = new SqlConnection(AppConfiguration.ConnectionString))
    {
    SqlCommand sqlCommand = new SqlCommand("eshop_Products_InsertItem", sqlConnection);
    sqlCommand.CommandType = CommandType.StoredProcedure;

    FillSqlParameters(product, sqlCommand.Parameters);

    sqlConnection.Open();
    sqlCommand.ExecuteNonQuery();
    sqlConnection.Close();
    }
    }
    public static void UpdateItem(Product product)
    {
    using (SqlConnection sqlConnection = new SqlConnection(AppConfiguration.ConnectionString))
    {
    SqlCommand sqlCommand = new SqlCommand("eshop_Products_UpdateItem", sqlConnection);
    sqlCommand.CommandType = CommandType.StoredProcedure;

    FillSqlParameters(product, sqlCommand.Parameters);

    sqlConnection.Open();
    sqlCommand.ExecuteNonQuery();
    sqlConnection.Close();
    }
    }
    public static void DeleteItem(Product product)
    {
    using (SqlConnection sqlConnection = new SqlConnection(AppConfiguration.ConnectionString))
    {
    SqlCommand sqlCommand = new SqlCommand("eshop_Products_DeleteItem", sqlConnection);
    sqlCommand.CommandType = CommandType.StoredProcedure;

    sqlCommand.Parameters.AddWithValue("@Id", product.Id);

    sqlConnection.Open();
    sqlCommand.ExecuteNonQuery();
    sqlConnection.Close();
    }
    }
    private static Product GedDataRecod(IDataRecord dataRecord)
    {
    Product product = new Product();

    for (int i = 0; i < dataRecord.FieldCount; i++)
    {
    string fieldName = dataRecord.GetName(i);

    switch (fieldName)
    {
    case "Id":
    product.Id = dataRecord.GetGuid(i);
    break;
    case "Name":
    product.Name = dataRecord.GetString(i);
    break;
    case "Title":
    product.Title = dataRecord.GetString(i);
    break;
    case "MetaDescription":
    product.MetaDescription = dataRecord.GetString(i);
    break;
    case "MetaKeywords":
    product.MetaKeywords = dataRecord.GetString(i);
    break;
    case "Content":
    product.Content = dataRecord.GetString(i);
    break;
    case "Price":
    product.Price = dataRecord.GetDecimal(i);
    break;
    case "Weight":
    product.Weight = dataRecord.GetInt32(i);
    break;
    case "SerialNumber":
    product.SerialNumber = dataRecord.GetString(i);
    break;
    case "CreateDate":
    product.CreateDate = dataRecord.GetDateTime(i);
    break;
    }
    }

    return product;
    }
    private static void FillSqlParameters(Product product, SqlParameterCollection sqlParameters)
    {
    sqlParameters.AddWithValue("@Id", product.Id);
    sqlParameters.AddWithValue("@Name", product.Name);
    sqlParameters.AddWithValue("@Title", product.Title);
    sqlParameters.AddWithValue("@MetaDescription", product.MetaDescription);
    sqlParameters.AddWithValue("@MetaKeywords", product.MetaKeywords);
    sqlParameters.AddWithValue("@Content", product.Content);
    sqlParameters.AddWithValue("@Price", product.Price);
    sqlParameters.AddWithValue("@Weight", product.Weight);
    sqlParameters.AddWithValue("@SerialNumber", product.SerialNumber);
    }
    }
    }
    آخرین ویرایش به وسیله clover : یک شنبه 11 فروردین 1392 در 15:36 عصر

  8. #8
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    گام پنجم: ایجاد لایه ی Business Logic

    یک پروژه ی دیگر از نوع Class Library و با نام BusinessLogic به Solution خود اضافه کنید. سپس فضای نام پیش فرض آن را به eShop.BusinessLogic تغییر داده و کلاس پیش فرض ایجاد شده همراه با پروژه را نیز حذف کنید.
    این پروژه در واقع نقش لایه ی Business Logic ما را ایفا خواهد کرد. همانطور که پیش تر گفته شد این لایه در واقع مانند یک پل بین لایه های Presentation و Data Access عمل خواهد کرد. این لایه وظیفه ی بررسی درخواست هایی را دارد که از لایه ی Presentation به آن ارسال می شوند. در صورتی که این درخواست ها معتبر باشند به لایه ی Data Access فرستاده شده و نتیجه به لایه Presentation برگردانده می شود.

    از آنجایی که در این لایه نیاز به دسترسی به لایه های Business Entities و Data Access را داریم پیش از هر چیز ارجاع هایی به پروژه های BusinessEntities و DataAccess ایجاد نمایید. همچنین برای دسترسی به درخواست HTTP کاربران و همچنین سیستم Membership، ارجاع هایی به اسمبلی های System.Web و System.Security ایجاد نمایید.

    فرض کنید قصد داریم یک محصول را به فروشگاه اضافه کنیم. درخواست ثبت این محصول از لایه ی Presentation و به شکل فراخوانی یک متد و ارسال مشخصات محصول مورد نظر در قالب یک شی از نوع Product به لایه ی Business Logic ارسال می شود. در این لایه بررسی بر روی فیلد ها انجام شده و مشخص می شود که فیلد SerialNumber شی مورد نظر خالی می باشد. در این حالت از ارسال درخواست به لایه ی Data Access و ثبت محصول جلوگیری به عمل می آید. با این وجود نیاز خواهیم داشته مشکل به وجود آمده را به لایه ی Presentation گزارش دهیم. برای این منظور کلاسی تعریف خواهیم کرد که شامل نتیجه ی عملیات مورد نظر (خطا یا موفقیت) و همچنین یک پیغام می باشد.

    پیش از ایجاد این کلاس به ایجاد انواع داده ای که در این کلاس مورد استفاده قرار خواهند گرفت خواهیم پرداخت. اولین نوع داده ای که به آن نیاز داریم، یک نوع داده ای شمارشی (Enum) با نام OperationStatus برای مشخص کردن وضعیت عملیات می باشد. این نوع داده ای در پروژه ی BusinessLogic تعریف خواهد شد.

    یک کلاس جدید با نام OperationStatus به پروژه ی BusinessLogic اضافه کرده و محتویات آن را به این شکل ویرایش کنید:
    namespace BusinessLogic
    {
    public enum OperationStatus
    {
    Success,
    SuccessWithError,
    Error
    }
    }

    نوع داده ای دیگری که ایجاد خواهیم کرد یک کلاس با نام Message می باشد. از آنجایی که در آینده این کلاس را در وب سایت و برای انتقال و نمایش پیغام های مختلف مورد استفاده قرار خواهیم داد آن را خارج از پروژه ی BusinessLogic و در یک پروژه ی مجزا با نام CommonLibrary تعریف خواهیم کرد. سپس از پروژه ی BusinessLogic یک ارجاع به آن ایجاد خواهیم کرد.

    یک پروژه ی جدید به نام CommonLibrary ایجاد کرده و فضای نام پیش فرض آن را به eShop.CommonLibrary تغییر دهید.

    یک کلاس جدید با نام MessageType در این پروژه ایجاد کرده و محتویات آن را به این شکل ویرایش کنید:
    namespace eShop.CommonLibrary
    {
    public enum MessageType
    {
    Info,
    Warning,
    Success,
    Error
    }
    }

    این کلاس حاوی تعریف یک نوع شمارشی جدید به نام MessageType می باشد که در کلاس Message برای مشخص کردن نوع پیام استفاده خواهد شد.

    حال نوبت به ایجاد کلاس Message می رسد. این کلاس حاوی دو Property می باشد. یکی از نوع string که برای نگهداری متن پیام مورد استفاده قرار می گیرد و دیگری از نوع MessageType که برای مشخص کردن نوع پیام مورد نظر مورد استفاده قرار خواهد گرفت. در آینده خواهید دید که چگونه از این کلاس برای انتقال پیام ها از لایه ی BusinessLogic به وب سایت و نمایش آن در صفحات استفاده خواهیم کرد.

    یک کلاس جدید با نام Message به پروژه ی CommonLibrary اضافه کرده و محتویات آن را به این شکل ویرایش کنید:
    using System;

    namespace eShop.CommonLibrary
    {
    public class Message
    {
    public string Text { get; set; }
    public MessageType Type { get; set; }
    }
    }

    حال قادر خواهیم بود کلاس OperationResult را ایجاد نماییم. این کلاس حاوی دو Property می باشد. یکی از نوع OperationStatus که برای مشخص کردن نتیجه عملیات مورد استفاده قرار می گیرد و دیگری از نوع Message می باشد که پیغامی متنی و قابل فهم برای کاربر را در خود نگهداری خواهد کرد.

    در پروژه ی BusinessLogic یک ارجاع به پروژه ی CommonLibrary ایجاد کنید سپس یک کلاس جدید با نام OperationResult به پروژه اضافه کرده و محتوای آن را به این شکل ویرایش کنید:
    using System;

    using eShop.CommonLibrary;

    namespace BusinessLogic
    {
    public class OperationResult
    {
    public Message Message { get; set; }
    public OperationStatus Status { get; set; }
    }
    }

    حال نوبت به ایجاد بخش اصلی در این لایه می رسد. این بخش کلاسی با نام ProductManager می باشد که همانطور که از نام آن پیداست وظیفه ی مدیریت درخواست های مربوط به محصولات فروشگاه را بر عهده دارد. این در خواست ها توسط توابعی که در این کلاس تعریف خواهیم کرد قابل انجام می باشند. همانند کلاس ProductRepository و همانطور که قبلا نیز ذکر شد از آنجایی که نیاز به ایجاد نمونه هایی از این کلاس ها نخواهیم داشت، کلاس و کلیه ی توابع موجود در آن را از نوع static تعریف خواهیم کرد.

    یک کلاس جدید با نام ProductManager ایجاد نموده و محتویات آن را به این شکل ویرایش نمایید:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Web;
    using System.Web.Security;

    using eShop.BusinessEntities;
    using eShop.CommonLibrary;
    using eShop.DataAccess;


    namespace BusinessLogic
    {
    [DataObject]
    public class ProductManeger
    {
    [DataObjectMethod(DataObjectMethodType.Select, true)]
    public static List<Product> GetList()
    {
    return ProductRepository.GetList();
    }

    [DataObjectMethod(DataObjectMethodType.Select)]
    public static Product GetItem(Guid id)
    {
    return ProductRepository.GetItem(id);
    }

    [DataObjectMethod(DataObjectMethodType.Insert, true)]
    public static OperationResult AddItem(Product product)
    {
    OperationResult result = new OperationResult();
    result.Status = OperationStatus.Error;

    if (!HttpContext.Current.User.IsInRole("Administrator "))
    {
    result.Message = new Message { Type = MessageType.Error, Text = "اجازه ی انجام چنین عملیاتی وجود ندارد" };
    return result;
    }

    if (!ValidateProduct(product, out result))
    return result;

    List<Product> products = GetList();

    if (products.Exists(x => x.Id == product.Id))
    {
    result.Message = new Message { Type = MessageType.Warning, Text = "محصولی با این شناسه از قبل وجود دارد" };
    return result;
    }

    if (products.Exists(x => x.Name == product.Name))
    {
    result.Message = new Message { Type = MessageType.Warning, Text = "محصولی با این نام از قبل وجود دارد" };
    return result;
    }

    if (products.Exists(x => x.Title == product.Title))
    {
    result.Message = new Message { Type = MessageType.Warning, Text = "محصولی با این عنوان از قبل وجود دارد" };
    return result;
    }

    ProductRepository.AddItem(product);

    result.Status = OperationStatus.Success;
    result.Message = new Message { Type = MessageType.Success, Text = "محصول مورد نظر با موفقیت اضافه گردید" };

    return result;
    }

    [DataObjectMethod(DataObjectMethodType.Update, true)]
    public static OperationResult EditItem(Product product)
    {
    OperationResult result = new OperationResult();
    result.Status = OperationStatus.Error;

    if (!HttpContext.Current.User.IsInRole("Administrator "))
    {
    result.Message = new Message { Type = MessageType.Error, Text = "اجازه ی انجام چنین عملیاتی وجود ندارد" };
    return result;
    }

    if (!ValidateProduct(product, out result))
    return result;

    List<Product> products = GetList();

    if (!products.Exists(x => x.Id == product.Id))
    {
    result.Message = new Message { Type = MessageType.Warning, Text = "محصولی با این شناسه یافت نشد" };
    return result;
    }

    if (products.Exists(x => x.Name == product.Name && x.Id != product.Id))
    {
    result.Message = new Message { Type = MessageType.Warning, Text = "محصولی با این نام از قبل وجود دارد" };
    return result;
    }

    if (products.Exists(x => x.Title == product.Title && x.Id != product.Id))
    {
    result.Message = new Message { Type = MessageType.Warning, Text = "محصولی با این عنوان از قبل وجود دارد" };
    return result;
    }

    ProductRepository.UpdateItem(product);

    result.Status = OperationStatus.Success;
    result.Message = new Message { Type = MessageType.Success, Text = "محصول مورد نظر با موفقیت ویرایش گردید" };

    return result;
    }

    [DataObjectMethod(DataObjectMethodType.Delete, true)]
    public static OperationResult DeleteItem(Product product)
    {
    OperationResult result = new OperationResult();
    result.Status = OperationStatus.Error;


    if (!HttpContext.Current.User.IsInRole("Administrator "))
    {
    result.Message = new Message { Type = MessageType.Error, Text = "اجازه ی انجام چنین عملیاتی وجود ندارد" };
    return result;
    }

    List<Product> products = GetList();

    if (!products.Exists(x => x.Id == product.Id))
    {
    result.Message = new Message { Type = MessageType.Warning, Text = "محصولی با این شناسه یافت نشد" };
    return result;
    }

    ProductRepository.DeleteItem(product);

    result.Status = OperationStatus.Success;
    result.Message = new Message { Type = MessageType.Success, Text = "محصول مورد نظر با موفقیت حذف گردید" };

    return result;
    }

    private static bool ValidateProduct(Product product, out OperationResult result)
    {
    result = new OperationResult();
    result.Status = OperationStatus.Error;
    result.Message = new Message { Type = MessageType.Error };

    product.Name = product.Name.Trim();
    product.Title = product.Title.Trim();
    product.MetaDescription = product.MetaDescription.Trim();
    product.MetaKeywords = product.MetaKeywords.Trim();
    product.Content = product.Content.Trim();
    product.SerialNumber = product.SerialNumber.Trim();

    if (string.IsNullOrEmpty(product.Name))
    {
    result.Message.Text = "نام محصول نمی تواند خالی باشد";
    return false;
    }

    if (product.Name.Length > 50)
    {
    result.Message.Text = "نام محصول نمی تواند بیشتر از 50 حرف باشد";
    return false;
    }

    if (string.IsNullOrEmpty(product.Title))
    {
    result.Message.Text = "عنوان محصول نمی تواند خالی باشد";
    return false;
    }

    if (product.Title.Length > 50)
    {
    result.Message.Text = "عنوان محصول نمی تواند بیشتر از 50 حرف باشد";
    return false;
    }

    if (product.MetaDescription.Length > 300)
    {
    result.Message.Text = "توضیحات محصول نمی تواند بیشتر از 300 حرف باشد";
    return false;
    }

    if (product.MetaKeywords.Length > 300)
    {
    result.Message.Text = "کلمات کلیدی محصول نمی تواند بیشتر از 800 حرف باشد";
    return false;
    }

    if (product.Content.Length > 10000)
    {
    result.Message.Text = "شرح محصول نمی تواند بیشتر از 10000 حرف باشد";
    return false;
    }

    if (product.Price < 0)
    {
    result.Message.Text = "قیمت وارد شده نامعتبر است";
    return false;
    }

    if (product.Weight < 0)
    {
    result.Message.Text = "وزن وارد شده نامعتبر است";
    return false;
    }

    if (string.IsNullOrEmpty(product.SerialNumber))
    {
    result.Message.Text = "شماره سریال محصول نمی تواند خالی باشد";
    return false;
    }

    if (product.SerialNumber.Length > 50)
    {
    result.Message.Text = "شماره سریال محصول نمی تواند بیشتر از 50 حرف باشد";
    return false;
    }

    return true;
    }
    }
    }
    آخرین ویرایش به وسیله clover : یک شنبه 11 فروردین 1392 در 15:42 عصر

  9. #9
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    گام ششم: ایجاد وب سایت - بخش اول: تنظیمات Connection String

    حال نوبت به ایجاد لایه ی Presentation که در واقع همان وب سایت مورد نظر ما می باشد رسیده است.

    از پنجره Solution Explore بر روی Solution خود راست کلیک کرده و از بخش Add گزینه ی New Web Site را انتخاب کنید.


    در پنجره ی ظاهر شده از بخش Visual C#‎‎‎‎ نوع وب سایت را ASP.NET Empty Web Site انتخاب کرده و مسیر آن را در همان پوشه ای که Solution ما در آن قرار دارد و در پوشه WebSite انتخاب کنید (نیازی به ساخت این پوشه نیست. فقط کافیست به انتهای مسیر Solution مقدار Website\ را نیز اضافه کنید تا در هنگام ایجاد وب سایت این پوشه به صورت خودکار ایجاد شود). سپس بر روی دکمه ی OK کلیک کنید تا وب سایت نظر ایجاد شود.


    در این لایه نیاز داریم به موجودیت های داده ای دسترسی داشته باشیم. از طرف دیگر دسترسی هایی را نیز به توابع موجود در لایه ی Business Logic و کلاس های تعریف شده در فضای نام CommonLibrary نیاز خواهیم داشت. بنابر این نیاز به ارجاع هایی به پروژه های مربوطه خواهیم داشت.

    ارجاع هایی را به پروژه های BusinessEntities، BusinessLogic و CommonLibrary ایجاد کنید.

    اگر به خاطر داشته باشید در هنگام ایجاد لایه ی DataAccess از تعریف Connection String خودداری کرده و تصمیم گرفتیم از Connection String ی که بعدا در فایل Web.config تعریف خواهیم کرد استفاده کنیم. حال موقع آن رسیده است که Connection String مورد نظر خود را به فایل Web.config اضافه کنیم.

    از وب سایت مورد نظر فایل Web.Config را باز کرده و کد های زیر را به بخش configuration اضافه کنید:
    <connectionStrings>
    <add name="eShop" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=db_eShop;Integrated Security=True" providerName="System.Data.SqlClient"/>
    </connectionStrings>

    همچنین نیاز داریم نام Connection String مورد نظر که قصد استفاده از آن را داریم (eShop) در بخش appSettings که در همین فایل Web.config تعریف می شود نگهداری کنیم. برای این منظور کدهای زیر را نیز به بخش configuration اضافه نمایید:
    <appSettings>
    <add key="ConnectionStringName" value="eShop" />
    </appSettings>

    در نهایت فایل Web.config شما باید به این شکل باشد:
    <?xml version="1.0"?>

    <configuration>

    <connectionStrings>
    <add name="eShop" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=db_eShop;Integrated Security=True" providerName="System.Data.SqlClient"/>
    </connectionStrings>

    <appSettings>
    <add key="ConnectionStringName" value="eShop" />
    </appSettings>

    <system.web>
    <compilation debug="false" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    </system.web>

    </configuration>

    از آنجایی که قصد داریم تنظیمات دیگری از وب سایت را نیز در بخش appSettings نگهداری کنیم و به منظور جلوگیری از شلوغ شدن فایل Web.config این بخش را در یک فایل جداگانه با نام AppSettings.config تعریف کرده و به آن فایل ارجاع می دهیم. از طرف دیگر چون بسته به تنظیمات سرور ممکن است دسترسی به پوشه ی ریشه توسط ASP.NET و امکان ایجاد فایل های موقت (Temporary) که برای تغییر در این فایل مورد نیاز است وجود نداشته باشد این فایل را در پوشه ای با نام Settings تعریف خواهیم کرد تا در آینده امکان تغییر سطح دسترسی آن بر روی سرور را داشته باشیم.

    در وب سایت مورد نظر پوشه ای با نام Settings ایجاد کرده و سپس فایلی از نوع Web Configuration File و با نام AppSettings.config در این پوشه ایجاد کنید. سپس محتوای آن را به این شکل ویرایش کنید:
    <?xml version="1.0"?>

    <appSettings>
    <add key="ConnectionStringName" value="eShop" />
    </appSettings>

    همچنین بخش appSettings در فایل Web.config را نیز به این شکل ویرایش نمایید:
    <appSettings configSource="Settings\AppSettings.config"/>

    در نهایت فایل Web.config شما باید به شکل زیر باشد:
    <?xml version="1.0"?>

    <configuration>

    <connectionStrings>
    <add name="eShop" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=db_eShop;Integrated Security=True" providerName="System.Data.SqlClient"/>
    </connectionStrings>

    <appSettings configSource="Settings\AppSettings.config"/>

    <system.web>
    <compilation debug="false" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    </system.web>

    </configuration>


    همچنین ساختار پوشه های Solution شما به این شکل باید باشد:


    در ادامه به تنظیم سیستم Membership برای استفاده از بانک مورد نظر خود خواهیم پرداخت و نقش ها و کاربران مورد نظر را ایجاد خواهیم کرد.
    آخرین ویرایش به وسیله clover : چهارشنبه 21 فروردین 1392 در 18:02 عصر

  10. #10

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    ضمن تشکر فراوان به خاطر آموزش فوق العاده تون ، امیدوارم هر چه زودتر لطف کنید و قسمتهای بعدی آموزش رو کامل کنید
    دعاتون می کنم

  11. #11
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    با سلام
    تاپیک به روز رسانی شد و پست مربوط به ایجاد لایه ی Business Logic هم تکمیل شد. در صورتی که تا اینجای کار سوالی دارید و یا در مورد تاپیک انتقاد یا پیشنهادی دارید در همین تاپیک مطرح کنید.

    با تشکر

  12. #12

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    تا اینجا که عالی بوده ! کلی چیز یاد گرفتم . فقط منتظرم ببینم نتیجه اش چی میشه . امیدورام زودتر تکمیل بشه. مرسی

  13. #13
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    گام ششم: ایجاد وب سایت - بخش دوم: تنظیمات Membership و ایجاد کاربران

    رزرو برای تنظیمات Membership و ایجاد کاربران

  14. #14
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    گام ششم: ایجاد وب سایت - بخش سوم: ایجاد پنل مدیریت

    رزرو برای ایجاد پنل مدیریت

  15. #15
    کاربر دائمی آواتار amirsajjadi
    تاریخ عضویت
    آبان 1385
    محل زندگی
    خراسان رضوی - سبزوار
    سن
    33
    پست
    871

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    ممنون از مطالبی که گذاشتید. توی پروژه های گروهی که از تکنیک چندلایه استفاده میشه هیچ وقت مستقیم پیغام ها رو نمینویسن بلکه اونا رو از یک لایه به لایه بالاتر throw میکنن و در آخرین لایه اونا رو مدیریت میکنن. منظورم این نیست که پروژه شما درست نیست بلکه این نوعی که شما نوشتید برای پروژه های یک یا دو نفره کاربرد داره.
    بازم تشکر میکنم از این تاپیک مفیدتون

  16. #16
    کاربر دائمی
    تاریخ عضویت
    تیر 1388
    محل زندگی
    نا کجا باد
    پست
    813

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    با سلام میشه یک نمونه بگذاری و یک کم بیشتر توضیح بدهید؟؟؟؟
    هیچ وقت مستقیم پیغام ها رو نمینویسن بلکه اونا رو از یک لایه به لایه بالاتر throw میکنن و در آخرین لایه اونا رو مدیریت میکنن

  17. #17
    کاربر دائمی آواتار علی متقی پور
    تاریخ عضویت
    تیر 1391
    محل زندگی
    تهران
    پست
    307

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    من آموزش رو کامل ندیدم ولی همنیکه دیدم هنوز از ado.net و sp استفاده کردید ترجیح دادم اصلا یادش نگیرم.

    بابا جون مایکروسافت خودش ado.net را ایجاد کرده حالا EF5 هم اومده. تیم تولیدشون هم یکیه. آخه چه کاریه که بیائیم اینطوری کد بنویسیم؟

  18. #18
    کاربر دائمی آواتار s.hoseinpoor
    تاریخ عضویت
    دی 1390
    محل زندگی
    ترکیه، آنکارا
    پست
    170

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط a_mottaghi_pour مشاهده تاپیک
    من آموزش رو کامل ندیدم ولی همنیکه دیدم هنوز از ado.net و sp استفاده کردید ترجیح دادم اصلا یادش نگیرم.

    بابا جون مایکروسافت خودش ado.net را ایجاد کرده حالا EF5 هم اومده. تیم تولیدشون هم یکیه. آخه چه کاریه که بیائیم اینطوری کد بنویسیم؟
    شما می گید الان ما چیکار کنیم؟

  19. #19
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    از نظراتی که دادید تشکر می کنم.

    ممنون از مطالبی که گذاشتید. توی پروژه های گروهی که از تکنیک چندلایه استفاده میشه هیچ وقت مستقیم پیغام ها رو نمینویسن بلکه اونا رو از یک لایه به لایه بالاتر throw میکنن و در آخرین لایه اونا رو مدیریت میکنن.
    حرف شما کاملا درست هست، حقیقت اینه که من در ابتدا قصد داشتم پیغام ها رو در لایه ی Data Access هم به همین صورت فعلی تولید کنم اما به همین دلیلی که فرمودید منصرف شدم و سعی کردم این شیوه رو در همین لایه محدود کنم و به لایه های دیگه بسط ندم تا در آینده برای اعمال تصحیحات با مشکل حادی رو به رو نباشم. به هر حال ما در حال پیاده سازی یه فروشگاه اینترنتی ساده و جمع و جور هستیم که معمولا یک نفره طراحی میشه و در حال حاضر هم در بخش ASP.NET افراد زیادی در مورد پیاده سازی بخش های مختلفش (سبد خرید، ادیتور و فایل منیجر، شاخه بندی و ...) مشکل دارند و من ترجیح دادم در این مرحله به همین شیوه بسنده کنم و قضیه رو از این پیچیده تر نکنم اما تذکر شما مد نظرم هست و شاید پس از اتمام آموزش تغییراتی رو ایجاد کردم. در صورت تمایل می تونید نمونه هایی از شیوه ی مد نظر خودتون رو در همین تاپیک قرار بدید تا دوستان استفاده کنند. باز هم ممنون

    من آموزش رو کامل ندیدم ولی همنیکه دیدم هنوز از ado.net و sp استفاده کردید ترجیح دادم اصلا یادش نگیرم.
    شما مختارید
    بابا جون مایکروسافت خودش ado.net را ایجاد کرده حالا EF5 هم اومده. تیم تولیدشون هم یکیه. آخه چه کاریه که بیائیم اینطوری کد بنویسیم؟
    هدف من درک بهتر از ارتباط با پایگاه داده به دلیل نزدیکی بیشتر ADO.NET با پایگاه داده و درگیری بیشتر با کوئری ها از یک طرف و از طرف دیگه کد های میانی کمتر بود، همینطور کارایی بالاتر و سادگی فهم چگونگی کارکرد (و نه به کارگیری) ADO.NET هم مد نظرم بود. در ضمن به این نکته هم دقت کنید که Entity Framework در واقع بخشی از ADO.NET هست پس در هر صورت ما داریم از ADO.NET استفاده می کنیم اما من دارم از تکنولوژی های قدیمی تر ADO.NET و کلاس های سطح پایین تری استفاده می کنم و به شما اطمینان میدم این شیوه رو با آگاهی کامل انتخاب کردم. باز هم از اینکه انتقادتون رو مطرح کردید ازتون تشکر می کنم.

    از دوستان خواهش می کنم باز هم اگر انتقاد، پیشنهاد یا نظری دارند مطرح کنند.
    آخرین ویرایش به وسیله clover : پنج شنبه 22 فروردین 1392 در 01:49 صبح

  20. #20
    کاربر دائمی آواتار علی متقی پور
    تاریخ عضویت
    تیر 1391
    محل زندگی
    تهران
    پست
    307

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط s.hoseinpoor مشاهده تاپیک
    شما می گید الان ما چیکار کنیم؟
    منظورت را متوجه نشدم دوست عزیز

  21. #21
    کاربر دائمی آواتار علی متقی پور
    تاریخ عضویت
    تیر 1391
    محل زندگی
    تهران
    پست
    307

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط clover مشاهده تاپیک
    از نظراتی که دادید تشکر می کنم.


    حرف شما کاملا درست هست، حقیقت اینه که من در ابتدا قصد داشتم پیغام ها رو در لایه ی Data Access هم به همین صورت فعلی تولید کنم اما به همین دلیلی که فرمودید منصرف شدم و سعی کردم این شیوه رو در همین لایه محدود کنم و به لایه های دیگه بسط ندم تا در آینده برای اعمال تصحیحات با مشکل حادی رو به رو نباشم. به هر حال ما در حال پیاده سازی یه فروشگاه اینترنتی ساده و جمع و جور هستیم که معمولا یک نفره طراحی میشه و در حال حاضر هم در بخش ASP.NET افراد زیادی در مورد پیاده سازی بخش های مختلفش (سبد خرید، ادیتور و فایل منیجر، شاخه بندی و ...) مشکل دارند و من ترجیح دادم در این مرحله به همین شیوه بسنده کنم و قضیه رو از این پیچیده تر نکنم اما تذکر شما مد نظرم هست و شاید پس از اتمام آموزش تغییراتی رو ایجاد کردم. در صورت تمایل می تونید نمونه هایی از شیوه ی مد نظر خودتون رو در همین تاپیک قرار بدید تا دوستان استفاده کنند. باز هم ممنون


    شما مختارید

    هدف من درک بهتر از ارتباط با پایگاه داده به دلیل نزدیکی بیشتر ADO.NET با پایگاه داده و درگیری بیشتر با کوئری ها از یک طرف و از طرف دیگه کد های میانی کمتر بود، همینطور کارایی بالاتر و سادگی فهم چگونگی کارکرد (و نه به کارگیری) ADO.NET هم مد نظرم بود. در ضمن به این نکته هم دقت کنید که Entity Framework در واقع بخشی از ADO.NET هست پس در هر صورت ما داریم از ADO.NET استفاده می کنیم اما من دارم از تکنولوژی های قدیمی تر ADO.NET و کلاس های سطح پایین تری استفاده می کنم و به شما اطمینان میدم این شیوه رو با آگاهی کامل انتخاب کردم. باز هم از اینکه انتقادتون رو مطرح کردید ازتون تشکر می کنم.

    از دوستان خواهش می کنم باز هم اگر انتقاد، پیشنهاد یا نظری دارند مطرح کنند.
    سلام البته من نخاستم زیاد وارد فاز انتقاد بشم ولی حالا که خودت استقبال میکنی باید بگم: 1. من یقین داریم این به اصطلاح آموزش نوشته شما نیست و بهمین خاطر ضعف هاش رو به پای شما نمیذارم 2. این متن اصلا آموزش نیست. اینجا مثلا نوشته &quot;روی اسم پروژه راست کلیک کنید و گزینه کلاس را انتخاب کنید و بعد این کد ها را داخل کلاس پیست کنید&quot; آخه اینکه نشد آموزش. جالبه که تو کد ها چقدر هم از اتریبیوت استفاده شده !!! برادر من اون شاخ هاش هم هنوز خیلی از اتربیوت ها رو نمیشناسن چه برسه بنده نوعی. حالا تو اموزشی که نحوه کلیک راست کردن هم نوشته شده یک کلمه در مورد اینکه این کدها چین و برای چی نوشته شدن نیومده. 3. استفاده از sp در یک برنامه که فعالیت دیتا بیسی بسیار کمی هم داره چه معنایی داره؟ الان برنامه های بزرگ هم دیگه از sp استفاده نمیکنن چه برسه برنامه های ساده ای مثل یک ای شاپ. با اینکه من خودم بشخصه تی اسکیو ال نویسیم قوی تر از لینک نویسیم هست ولی بازم هیچ رقمه حاضر نیستم حتی از یک sp هم استفاده کنم. sp ها واقعا پر سرعتن. ولی دیگه دورانشون تموم شده. شما وقتی میخوای یه برنامه قابل توسعه و نگهداری داشته باشی. وقتی صحبت از بیزینس لاجیک لایر میکنی دیگه معنی نداره که بیای sp بنویسی و همه منطق برنامه رو با اون پیاده کنی. 4. نحوه ولیدیشن اطلاعات هم واقعا دیدنیه. 5. من فکر میکنم یه سری ازکد های قرار گرفته در اینجا توسط کد جنریتور ساخته شده بهرحال میدونم خیلی جسته و گریخته و نا منظم نوشتم ولی میخاستم در حد سواد کم خودم بگم که این به اصطلاح آموزش بسیار ضعیف و غیر علمیه

  22. #22
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    1. من یقین داریم این به اصطلاح آموزش نوشته شما نیست و بهمین خاطر ضعف هاش رو به پای شما نمیذارم
    اتفاقا متن کاملا نوشته ی من هست و به همین دلیل ضعف های زیادی داره، من واهمه ای از قبول این ضعف ها ندارم و دوست دارم اون ها رو برطرف کنم.

    2. این متن اصلا آموزش نیست.
    دلیل بیارید. مثالی زدید و گفتید راجع به فلان چیز توضیح نداده. یعنی اگر توضیح بده میشه آموزش؟ یا اشکالات دیگه ای هم داره؟ شاید هم کلا هیچ وقت نتونه آموزش بشه، نظرتون چیه؟

    حالا تو اموزشی که نحوه کلیک راست کردن هم نوشته شده یک کلمه در مورد اینکه این کدها چین و برای چی نوشته شدن نیومده
    جالب تر اینه که تا حالا حتی یک نفر هم نپرسیده این کدها چی هستند در چند تا سوالی که تا الان به صورت خصوصی به دست من رسیده بیشتر در مورد مفاهیمی که در پروژه های Visual Studio مطرحه مثل نوع پروژه ها، تنظیمات و ... و همینطور مسایل مربوط به پایگاه داده سوال پرسیده شده. به طور مثال از من پرسیده شده Solution چی هست. پس به من حق بدید که به جای اینکه بگم "یک Solution جدید ایجاد کنید" بیام و حتی در مورد کلیک کردن روی فلان گزینه هم بنویسم. چون هدف اینه که از توقف و دلسردی کسی که داره از این متن استفاده میکنه، به خاطر اینکه ممکنه ندونه Solution چی هست و چطوری ایجاد میشه جلوگیری کنم.

    3. استفاده از sp در یک برنامه که فعالیت دیتا بیسی بسیار کمی هم داره چه معنایی داره؟ الان برنامه های بزرگ هم دیگه از sp استفاده نمیکنن چه برسه برنامه های ساده ای مثل یک ای شاپ. با اینکه من خودم بشخصه تی اسکیو ال نویسیم قوی تر از لینک نویسیم هست ولی بازم هیچ رقمه حاضر نیستم حتی از یک sp هم استفاده کنم. sp ها واقعا پر سرعتن. ولی دیگه دورانشون تموم شده. شما وقتی میخوای یه برنامه قابل توسعه و نگهداری داشته باشی. وقتی صحبت از بیزینس لاجیک لایر میکنی دیگه معنی نداره که بیای sp بنویسی و همه منطق برنامه رو با اون پیاده کنی.
    در هر صورت من در مورد SP ها نمی تونم صحبت شما رو قبول کنم و دلایل شما برای عدم استفاده از SP ها برام قانع کننده نیست.

    4. نحوه ولیدیشن اطلاعات هم واقعا دیدنیه.
    متوجه هستم اما فکر می کنم تا همین حد برای اینکه یه شخص مبتدی درک کنه به طور مثال لایه ی Business Logic چه کاری داره انجام میده کافیه. شما پیشنهادات خودتون رو به همراه مثال در همین تاپیک بگذارید تا بقیه استفاده کنند.

    5. من فکر میکنم یه سری ازکد های قرار گرفته در اینجا توسط کد جنریتور ساخته شده
    هیچکدوم توسط کد جنریتور ساخته نشده، قصد من هم همین بوده.

    اما یک توضیح کلی راجع به انتقاد شما میدم. من چند سالی هست که داخل این تالار فعالیت می کنم و خیلی زیاد به کاربرانی برخوردم که توی ASP.NET در مورد مسایل به صورت جزیی (گسسته) اطلاعات دارند (مثلا اتریبیوت ها، برنامه نویسی شی گرا، چند لایه و ...) اما نمی دونند که چطور باید از این اطلاعات در طول یک پروژه استفاده کنند. نمی دونند از کجا باید شروع کنند و به کجا ختم کنند. از طرف دیگه کاربرانی رو دیدم که با داشتن همین اطلاعات حتی نمی تونند از کدها و پروژه های آماده استفاده کنند چون نمی دونند که به طور مثال بانک رو کجا باید ایجاد کنند و چطور به برنامه متصل کنند. کد ها رو کجا باید بنویسند و ... شاید خیلی از مواردی که به نظر شما ضعف میرسه حتی نقطه ی قوت این آموزش باشه. خیلی ها حوصله مطالعه ندارند و دوست دارند فقط سریع نرم افزار ساخته بشه و شروع به کار کنه. خیلی ها به خاطر بی اطلاعی از مسائل بسیار جزیی نمی تونند از آموزش ها استفاده کنند و من جامعه ی هدف این آموزش رو این افراد در نظر گرفتم.

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

    بهرحال میدونم خیلی جسته و گریخته و نا منظم نوشتم ولی میخاستم در حد سواد کم خودم بگم که این به اصطلاح آموزش بسیار ضعیف و غیر علمیه
    همین که وقت گذاشتید و این مسائل رو مطرح کردید ازتون تشکر می کنم.

    موفق باشید
    آخرین ویرایش به وسیله clover : پنج شنبه 22 فروردین 1392 در 09:16 صبح

  23. #23

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط clover مشاهده تاپیک
    اما یک توضیح کلی راجع به انتقاد شما میدم. من چند سالی هست که داخل این تالار فعالیت می کنم و خیلی زیاد به کاربرانی برخوردم که توی ASP.NET در مورد مسایل به صورت جزیی (گسسته) اطلاعات دارند (مثلا اتریبیوت ها، برنامه نویسی شی گرا، چند لایه و ...) اما نمی دونند که چطور باید از این اطلاعات در طول یک پروژه استفاده کنند. نمی دونند از کجا باید شروع کنند و به کجا ختم کنند.

    و من یکی از همین کاربر ها هستم . یعنی با این آموزش کلی اطلاعات بدست آوردم . برای من که فوق العاده مفید بود و همچنان منتظر قسمتهای بعدی اون هستم . مرسی

  24. #24
    کاربر دائمی آواتار علی متقی پور
    تاریخ عضویت
    تیر 1391
    محل زندگی
    تهران
    پست
    307

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    با سلام مجدد
    شاید من این آموزش رو تائید نکنم ولی واقعا نوع برخورد شما با انتقادات و ادب پاسخگوئیتون رو نه تنها تائید میکنم بلکه تحسین هم میکنم.

    من واقعا نمیتونم درک کنم که اون کسائیکه معتقدند این آموزش براشون مفیده چه فکری دارن و اینکه اصولا چطور شما معتقدید که کسیکه نمدونه سلوشون چیه باید بهش آموزش ساخت eShop را داد. ولی میدونم که مهم رضایت استفاده کنندگان آموزشه نه من. البته من یه مقدار به آقا یا خانوم fire_love هم مشکوکم :-)

  25. #25

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط a_mottaghi_pour مشاهده تاپیک
    البته من یه مقدار به آقا یا خانوم fire_love هم مشکوکم :-)
    منظورتون از مشکوک بودن چیه ؟ امیدوارم یکم بیشتر به هم احترام بزاریم و اینقدر همدیگه رو قضاوت نکنیم . هر چند این از ویژگیهای دیرینه ما ایرانی هاست
    مرسی

  26. #26

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط a_mottaghi_pour مشاهده تاپیک
    من آموزش رو کامل ندیدم ولی همنیکه دیدم هنوز از ado.net و sp استفاده کردید ترجیح دادم اصلا یادش نگیرم.
    سلام. من هم آموزش را نخوندم ولی این صحبتتون برام جالب بود. چرا میگید نباید از sp استفاده بشه؟ میشه علتش رو بگید چون همه جا میگن بهتره همیشه از sp استفاده کنیم.

  27. #27

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    ببخشید دوست عزیز من یه سؤال کلی دارم
    البته متن آموزش رو کامل نخوندم ولی تیکه تیکه نگاه انداختم به نظر واضح و خوب بود معلومه وقت زیادی گذاشتید،سؤالم اینه که خیلی وقته از sp و اون نوع ارتباط پایگاه داده استفاده نمی کنم،از linq - EF استفاده می کنم،کاره درستی می کنم یا بهتره از همون روش قدیم استفاده کرد؟
    یه درخواست هم دارم که اگه ممکنه یه رفرنس MVC هم بدید که به واضحیه آموزش خودتون باشه چون به دلیل کمبود وقت نرسیدم رفرنس های زبان اصلی و پیچیده رو بخونم
    با سپاس از لطف شما

  28. #28
    مدیر بخش آواتار ahmad156
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    شیراز
    پست
    2,104

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    در مورد عدم کارایی Stored Procedure با وجود Entity Framework هم جایی مقاله ای خوندم ولی منبعش یادم نمیاد.
    توی مقاله گفته بود که تمام مزیت های Stored Procedure ها رو EF پوشش میده که یکی از اونها جلوگیری از Sql Enjection ها بود



  29. #29
    کاربر دائمی آواتار علی متقی پور
    تاریخ عضویت
    تیر 1391
    محل زندگی
    تهران
    پست
    307

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط fire_love مشاهده تاپیک
    منظورتون از مشکوک بودن چیه ؟ امیدوارم یکم بیشتر به هم احترام بزاریم و اینقدر همدیگه رو قضاوت نکنیم . هر چند این از ویژگیهای دیرینه ما ایرانی هاست
    مرسی
    سلام دوست عزیز
    فکر مکینم کاملا واضح بود که شوخی کردم باهات
    بهر حال حتی اگر من بد همب اشه بهتره بدی من رو به پای بدی همه ایرانی ها نذارید


    نقل قول نوشته شده توسط maktab مشاهده تاپیک
    سلام. من هم آموزش را نخوندم ولی این صحبتتون برام جالب بود. چرا میگید نباید از sp استفاده بشه؟ میشه علتش رو بگید چون همه جا میگن بهتره همیشه از sp استفاده کنیم.
    sp ها از نظر سرعت و پرفورمنس بی رقیبند. ولی چند تا اشکال دارن:
    1. برنامه رو به دو قسمت کد ها عادی برنامه و sp ها تقسیم میکنند
    2. دیباگشون سخته
    3. بر مبنای اصول ری یوزیبیلیتی کار نمیکنن. یعنی در اکثر موارد اصلا قابل استفاده مجدد نیستن
    4. وقتی شما بفرض بخواهید برنامه رو تغییر یا توسعه بدید کارتون رو سخت میکنن.
    5. اگر دیتا بیس شما عوض بشه دیگه هیچ فایده ای ندارن و زحمت شما هدر رفته
    6. ...

    بذار به زبون ساده اش رو هم بگم. دوست عزیزم اگر کسی هم به ما چیزی نگه و خودمون پیش خودمون فکر کنیم معنی نداره وقتی مثلا من ادعا میکنم برنامه من به زبان سی شارپه بیام لاجیک برنامم رو ببرم روی sp.
    توجه کن sp ها هرگز بعنوان یه گزارش گیری ساده بکار نمیروند بلکه معمولا برای اقدامات بسیار پیچیده تر استاده میشن و معمولا شامل چندین دستور هستن. واقعا چه کاریه که ما وقتی میگیم دیتا بیس محل ذخیره اطلاعاته بعد بیائیم تحیلیمون رو هم ببریم روی دیتا بیس. بیایئم لاجیک روش بنویسیم. حتی ولیدیشن بنویسیم؟ من سوادم خیلی کمه ولی همین که خودم با خودم فکر میکنم می فهمم sp ها سریع، جالب و بدرد نخورن
    آخرین ویرایش به وسیله علی متقی پور : سه شنبه 24 اردیبهشت 1392 در 01:02 صبح

  30. #30

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    با تشکر از زحمات شما
    البته من هم یک پروژه متن باز گذاشتم روی وب "فروشگاه اینترنتی با معماری سه لایه" بد نیست نگاهی بهش بندازین
    موفق و موید باشید

  31. #31

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط ahmad156 مشاهده تاپیک
    در مورد عدم کارایی Stored Procedure با وجود Entity Framework هم جایی مقاله ای خوندم ولی منبعش یادم نمیاد.
    توی مقاله گفته بود که تمام مزیت های Stored Procedure ها رو EF پوشش میده که یکی از اونها جلوگیری از Sql Enjection ها بود
    سلام بله درست مطالعه کردین
    یکی از لینکهاش این سایته

  32. #32

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    این اموزش با ASP.net Web Form هست یا Asp.net MVC ؟؟

  33. #33
    مدیر بخش آواتار ahmad156
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    شیراز
    پست
    2,104

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

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



  34. #34
    کاربر دائمی آواتار ad.davachi
    تاریخ عضویت
    خرداد 1389
    محل زندگی
    تهران
    پست
    161

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    سلام چرا آموزشتون رو کامل نکردید؟

  35. #35
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط ad.davachi مشاهده تاپیک
    سلام چرا آموزشتون رو کامل نکردید؟
    بابت تاخیر عذر خواهی می کنم، نوشتن کار زمان بری هست و این باعث وقفه میشه اما به زودی آموزش رو تکمیل می کنم.
    از دوستانی که اومدند و انتقاد کردند هم خواهش می کنم پاسخ سوالاتی که مطرح شد رو بدند و همینطور پیشنهادات خودشون رو هم مطرح کنند، چون بعد از تکمیل بخش اول قصد دارم یک بازنگری روی کل کد ها داشته باشم.
    همینطور کسانی که از مطالب این آموزش استفاده می کنند در صورتی که ابهامی وجود داره مطرح کنند تا پاسخ داده بشه.

  36. #36
    کاربر دائمی آواتار ad.davachi
    تاریخ عضویت
    خرداد 1389
    محل زندگی
    تهران
    پست
    161

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    خیلی عالی هست من مشتاقانه منتظر ادامه مطلب هستم
    اگر خیلی وارد جزییات نشیدسرعت کار خیلی بالا میره و هم خودتون کمتر خسته میشید هم ما بیشتر از مطالبتون استفاده میکنیم
    با تشکر از شما

  37. #37
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایران
    سن
    36
    پست
    467

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    من کدهاتونو و آموزشتونو خوندم
    برخلاف گفته های دوست عزیز a_mottaghi_pour آموزش خوبیه
    من همه این کدارو بلد بودم و طرز استفادشونم بلد بودم ولی در بین گفته ها ممکنه بعضی افزار نکات ریزی رو یاد بگیرند . درسته که یه ذره قسمت های کلیک روی فلان قسمت و ... حوصله آدمو سر ببره ولی ممکنه برا بعضی هم این قسمتاش آموزنده باشه
    تنها قسمتایی که یه نظر منم گنگ اومد همون اتریبیوت ها هستند که یا باید همینجا بیشتر توضیح داده بشه ویا اینکه یه ذره هم خودمون زحمت بکشیم و بریم سراغشون . من با بعضی از اونا قبلا آشنا بودم ولی اینجا هم با بعضی دیگش آشنا شدم
    به هر حال از دوستمون ممنونم و منتظر بقیه آموزش هستم
    در مورد استورد پریسجر ها هم من نظرم اینه که ازشون استفاده نکنیم بهتره چون ..... (قبلا بهشون اشاره شده) ولی من خودم هیچ وفت ازشون استفاده نکردم چون اصلا بلد نیستم ولی باز نظرم همونه
    موفق باشد

  38. #38
    کاربر دائمی
    تاریخ عضویت
    آبان 1385
    محل زندگی
    تهران پر از دود
    پست
    229

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    خیلی عالی هست مشتاقانه منتظر ادامه مطلب شما هستم دوست عزیز از انتقادهای به جا و بی جا بعضی از کاربران ناراحت نشید

    بهر حال این کد نویسی و تجربه شما هست که داره آموزش داده میشه دیگران اگه راه کارهای بهتری سراغ دارند

    میتونند ارائه کنند نه اینکه صرفآ اشکال بگیرند توی کدنویسی حرف زدن خیلی راحت هستش ولی در عمل .....

    امیدوارم ادامه پیدا کنه

  39. #39
    کاربر دائمی آواتار علی متقی پور
    تاریخ عضویت
    تیر 1391
    محل زندگی
    تهران
    پست
    307

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط hojjatshariffam مشاهده تاپیک
    من کدهاتونو و آموزشتونو خوندم
    برخلاف گفته های دوست عزیز a_mottaghi_pour آموزش خوبیه
    من همه این کدارو بلد بودم و طرز استفادشونم بلد بودم ولی در بین گفته ها ممکنه بعضی افزار نکات ریزی رو یاد بگیرند . درسته که یه ذره قسمت های کلیک روی فلان قسمت و ... حوصله آدمو سر ببره ولی ممکنه برا بعضی هم این قسمتاش آموزنده باشه
    تنها قسمتایی که یه نظر منم گنگ اومد همون اتریبیوت ها هستند که یا باید همینجا بیشتر توضیح داده بشه ویا اینکه یه ذره هم خودمون زحمت بکشیم و بریم سراغشون . من با بعضی از اونا قبلا آشنا بودم ولی اینجا هم با بعضی دیگش آشنا شدم
    به هر حال از دوستمون ممنونم و منتظر بقیه آموزش هستم
    در مورد استورد پریسجر ها هم من نظرم اینه که ازشون استفاده نکنیم بهتره چون ..... (قبلا بهشون اشاره شده) ولی من خودم هیچ وفت ازشون استفاده نکردم چون اصلا بلد نیستم ولی باز نظرم همونه
    موفق باشد
    شما با همه حرفای من موافقید ولی مخالفید؟!!!!!!
    بهرحال اینکه ایشون آموزششون رو ارائه ندادن مربوط به انتقاد بنده یا سایر دوستان نمیشه.
    ممکنه منبعی که ازشون این به اصطلاح آموزش رو کپی میکردن دیگه باقی مطلب رو نذاشته باشه :)
    اگر خودشون می نویسن که جالبه قبل از اتمام آموزش اونو منتشر کردن. مثه سریال های آبکی ایرانی که هنوز تموم نشدن منتشر میشن و آخرش میشم مثه قهوه تلخ!


    نقل قول نوشته شده توسط babak2000 مشاهده تاپیک
    خیلی عالی هست مشتاقانه منتظر ادامه مطلب شما هستم دوست عزیز از انتقادهای به جا و بی جا بعضی از کاربران ناراحت نشید

    بهر حال این کد نویسی و تجربه شما هست که داره آموزش داده میشه دیگران اگه راه کارهای بهتری سراغ دارند

    میتونند ارائه کنند نه اینکه صرفآ اشکال بگیرند توی کدنویسی حرف زدن خیلی راحت هستش ولی در عمل .....

    امیدوارم ادامه پیدا کنه
    :)))))))
    دوست عزیزم اگر بنده نوعی سواد آموزش دادن رو ندارم مجبور نیستم که بیام آموزش بدم. شما یک مدیر دولتی هستید؟ نیستید. بنظرتون اگر مثلا وزیر بشید میتونید موفق باشید؟ قطعا خبر چون اصلا تجربه اینکارو ندارید. خب آیا این به معنی اینه که شما حق انتقاد ندارید؟!
    چرا قبل از حرف زدن به ابتدائی ترین مسائل فکر نمیکنید؟
    اگر بنده میام اینجا حرفی میزنم خصومتی که با کسی ندارم. میگم اینی که شما سه خط در مورد نحوه ایجاد یک پروژه جدید مطلب بنویسید ولی یک کلمه نگید که این اتریبیوت ها چیه یا اصلا این کد ها رو برای چی نوشتیم دیگه نشد آموزش.
    امیدوارم همتون با خوندن این آموزش تو مایکروسافت استخدام شید
    دیگه من مزاحم موفقیتتون نمیشم
    خدا نگهدار

  40. #40
    کاربر دائمی
    تاریخ عضویت
    آبان 1385
    محل زندگی
    تهران پر از دود
    پست
    229

    نقل قول: آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP

    نقل قول نوشته شده توسط a_mottaghi_pour مشاهده تاپیک
    من آموزش رو کامل ندیدم ولی همنیکه دیدم هنوز از ado.net و sp استفاده کردید ترجیح دادم اصلا یادش نگیرم.

    بابا جون مایکروسافت خودش ado.net را ایجاد کرده حالا EF5 هم اومده. تیم تولیدشون هم یکیه. آخه چه کاریه که بیائیم اینطوری کد بنویسیم؟
    آقا مگه کسی شما را مجبور کرده بیاییداز ado استفاده کنید هر چی دوس داری استفاده کن
    دوست عزیزم اگر بنده نوعی سواد آموزش دادن رو ندارم مجبور نیستم که بیام آموزش بدم. شما یک مدیر دولتی هستید؟ نیستید. بنظرتون اگر مثلا وزیر بشید میتونید موفق باشید؟ قطعا خبر چون اصلا تجربه اینکارو ندارید. خب آیا این به معنی اینه که شما حق انتقاد ندارید؟!
    چرا قبل از حرف زدن به ابتدائی ترین مسائل فکر نمیکنید؟
    اگر بنده میام اینجا حرفی میزنم خصومتی که با کسی ندارم. میگم اینی که شما سه خط در مورد نحوه ایجاد یک پروژه جدید مطلب بنویسید ولی یک کلمه نگید که این اتریبیوت ها چیه یا اصلا این کد ها رو برای چی نوشتیم دیگه نشد آموزش.
    امیدوارم همتون با خوندن این آموزش تو مایکروسافت استخدام شید
    دیگه من مزاحم موفقیتتون نمیشم
    خدا نگهدار
    شما استاد مایکروسافت بغیر از تیکه انداختن مثل اینکه کار دیگه ای ندارید

    متاسفانه از این کاربرانی که تاپیک دیگران را خراب میکنند کم نیستن و هیچوقت هم یاد نمیگیرند
    اگه سوالی یا انتقادی دارند مودبانه و بدون حاشیه بپرسند و ... . بگذریم ....

صفحه 1 از 2 12 آخرآخر

تاپیک های مشابه

  1. طراحی و پیاده سازی - Enterprise Design for Remote Access
    نوشته شده توسط Identifier در بخش شبکه و Networking‌
    پاسخ: 2
    آخرین پست: دوشنبه 20 شهریور 1385, 16:55 عصر
  2. نظرتون رو در زمینه طراحی و پیاده سازی شیگرا این مثال بگید!
    نوشته شده توسط khafanovich در بخش تحلیل و طراحی نرم افزار
    پاسخ: 1
    آخرین پست: دوشنبه 05 اردیبهشت 1384, 00:17 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •