پروژه ASP.Net Core MVC (وب و سی شارپ)
این پروژه یک سیستم مدیریت فروش و مشتریان است که با استفاده از تکنولوژیهای مدرن وب (ASP.NET Core) طراحی شده است. هدف اصلی این پروژه، ثبت اطلاعات مشتریان، مدیریت سفارشات آنها و ارائه گزارشهای تحلیلی از فروش است.
در ادامه، معماری و عملکرد پروژه را بدون کد توضیح میدهم:
### ۱. معماری پروژه (Architecture)
این پروژه از الگوی MVC (Model-View-Controller) پیروی میکند که وظایف را به سه بخش اصلی تقسیم میکند:
* Model (مدل): نمایانگر دادهها هستند. در این پروژه ما دو مدل اصلی داریم: «مشتری» (شامل نام، شهر، ایمیل) و «سفارش» (شامل مبلغ، تاریخ، و شناسه مشتری).
* View (ویو): صفحات وبی هستند که کاربر میبیند (فرمها، جداول، دکمهها). وظیفه ویو نمایش دادهها به کاربر و دریافت ورودیهای اوست.
* Controller (کنترلر): مدیر یا رابط بین کاربر و دادههاست. وقتی کاربر دکمهای را میزند، کنترلر تصمیم میگیرد چه کاری انجام شود (مثلاً اطلاعات را بگیرد، اعتبارسنجی کند و به ریپوزیتوری بسپارد).
### ۲. لایه دسترسی به داده (Repository Pattern)
به جای اینکه کنترلر مستقیماً با دیتابیس یا لیست دادهها کار کند، ما یک لایه میانی به نام Repository داریم.
* وظیفه: این لایه مسئول تمام عملیات ذخیرهسازی، بازیابی، ویرایش و حذف دادههاست.
* مزیت: اگر بخواهید در آینده دیتابیس خود را از "حافظه رم" به "SQL Server" تغییر دهید، فقط کدهای این بخش را تغییر میدهید و نیاز به دست زدن به کنترلرها یا ویوها نیست.
### ۳. مدیریت دادهها (In-Memory Data)
در این پروژه خاص، به جای استفاده از یک دیتابیس سنگین و پیچیده (مثل SQL)، از حافظه موقت (RAM) برای ذخیره دادهها استفاده شده است.
* دادهها در لیستهایی نگهداری میشوند.
* محدودیت: چون دادهها در رم هستند، اگر برنامه را ببندید یا کامپیوتر را ریستارت کنید، دادههای جدید پاک میشوند و به حالت اولیه برمیگردند. این روش برای پروتوتایپها و یادگیری بسیار سریع و مناسب است.
### ۴. قابلیتهای اصلی پروژه (CRUD)
پروژه دارای چهار عملیات اصلی است که روی هر دو موجودیت (مشتری و سفارش) انجام میشود:
1. Create (ایجاد): افزودن مشتری جدید یا ثبت یک سفارش برای مشتری خاص.
2. Read (خواندن): نمایش لیست تمام مشتریان یا لیست تمام سفارشات.
3. Update (بروزرسانی): ویرایش اطلاعات مشتری (مثل تغییر نام یا شهر).
4. Delete (حذف): پاک کردن یک مشتری (که به صورت خودکار سفارشات او را هم پاک میکند تا دادهها خراب نشوند) یا حذف یک سفارش.
### ۵. استفاده از LINQ پیشرفته
یکی از نقاط قوت این پروژه، استفاده از قابلیتهای جستجوی پیشرفته LINQ است. به طور خاص در بخش گزارشگیری:
* Join: ارتباط بین «سفارشات» و «مشتریان» برقرار میشود تا بتوانیم نام مشتری را کنار مبلغ سفارش ببینیم.
* GroupBy: سفارشات بر اساس «شهر» مشتریان دستهبندی میشوند.
* Select: اطلاعات تجمیعی مثل "مجموع فروش"، "تعداد سفارش" و "آخرین تاریخ خرید" برای هر شهر استخراج میشود.
### ۶. جریان کاری (Workflow)
فرض کنید کاربر میخواهد یک سفارش ثبت کند:
1. کاربر از صفحه اصلی وارد بخش مشتریان میشود.
2. لیست مشتریان را میبیند و دکمه «ثبت سفارش» را برای یکی از آنها میزند.
3. یک فرم باز میشود که مبلغ سفارش را میگیرد.
4. اطلاعات به کنترلر ارسال میشود.
5. کنترلر اطلاعات را به ریپوزیتوری میدهد.
6. ریپوزیتوری چک میکند آیا مشتری وجود دارد؟ اگر بله، سفارش را در لیست ذخیره میکند و یک شناسه (ID) جدید به آن اختصاص میدهد.
7. کاربر به صفحه لیست سفارشات هدایت میشود و سفارش جدید را در جدول میبیند.
این پروژه یک نمونه کامل و استاندارد از پیادهسازی عملیات CRUD با استفاده از شیگرایی در سیشارپ است.
TextFileCrudProject.zip
حجم:
2.5M
ببخشید اگر پروژه در دیتابیس ذخیره کنم حجم پروژه بالای 5 مگابایت می شود
پروژه ASP.Net Core MVC (وب و سی شارپ)
ببخشید اگر پروژه در دیتابیس ذخیره کنم حجم پروژه بالای 5 مگابایت می شود
در اینجا توضیحات کامل و مرحلهبهمرحله درباره پروژهای که کدهای آن را نوشتیم آورده شده است. این پروژه یک وباپلیکیشن مدیریت محصولات است که به جای دیتابیس، اطلاعات را در یک فایل متنی ذخیره میکند.
### ۱. هدف پروژه
هدف اصلی این پروژه، پیادهسازی عملیات CRUD (مخفف Create, Read, Update, Delete) بدون نیاز به نصب و پیکربندی دیتابیسهای سنگین مثل SQL Server است. این روش برای پروژههای کوچک، تمرینی یا یادگیری مفید است.
### ۲. معماری پروژه (Architecture)
این پروژه از الگوی MVC (Model-View-Controller) پیروی میکند و یک لایه سرویس (Service) برای مدیریت فایل دارد:
* Model (مدل):
کلاس
Productکه ساختار دادهها (شناسه، نام، قیمت) را تعریف میکند. * View (نما): صفحات HTML (Razor) که به کاربر نمایش داده میشوند (
Index,
Create,
Edit). * Controller (کنترلر):
ProductControllerکه بین کاربر و منطق برنامه واسطه میشود. * Service/Repository (سرویس):
ProductRepositoryکه وظیفه خواندن و نوشتن در فایل متنی را بر عهده دارد. ### ۳. نحوه ذخیرهسازی دادهها (Data Storage) دادهها در یک فایل با فرمت CSV (Comma Separated Values) ذخیره میشوند. این فرمت شبیه به یک جدول اکسل است که هر سطر آن یک رکورد و ستونها با کاما (
,) از هم جدا شدهاند. محتوای فایل database.txt:
Id,Name,Price 1,کتاب,50000 2,خودکار,10000* ردیف اول: هدرها (نام ستونها). * ردیفهای بعدی: دادههای واقعی. ### ۴. عملکرد متدهای سرویس (Repository Logic) کلاس
ProductRepositoryمغز متفکر سیستم فایل است: 1. GetAll (خواندن): * کل فایل را خط به خط میخواند (File.ReadAllLines). * خط اول (هدر) را نادیده میگیرد. * بقیه خطوط را با کاما جدا (
Split) کرده و به آبجکتهای
Productتبدیل میکند. 2. Add (افزودن): * لیست فعلی را میخواند تا آخرین
Idرا پیدا کند. * یک
Idجدید (آخرین + ۱) تولید میکند. * اطلاعات جدید را به انتهای فایل اضافه میکند (File.AppendAllText). 3. Update (ویرایش) و Delete (حذف): * از آنجا که ویرایش یک خط خاص در فایل متنی دشوار است، این متدها کل فایل را در حافظه میخوانند. * تغییرات لازم (ویرایش یا حذف آیتم از لیست) را در حافظه اعمال میکنند. * کل فایل روی دیسک را پاک کرده و لیست جدید را جایگزین میکنند (File.WriteAllLines). ### ۵. جریان اجرای برنامه (Workflow) الف) نمایش لیست (Index): 1. کاربر آدرس
/Product/Indexرا میزند. 2. کنترلر متد
GetAllسرویس را صدا میزند. 3. سرویس فایل را خوانده و لیست محصولات را برمیگرداند. 4. کنترلر لیست را به View میفرستد تا در جدول نمایش داده شود. ب) ثبت محصول جدید (Create): 1. کاربر فرم را پر کرده و دکمه ذخیره را میزند. 2. کنترلر اطلاعات را دریافت کرده و به متد
Addسرویس میدهد. 3. سرویس یک خط جدید به فایل database.txt اضافه میکند. 4. کاربر به صفحه لیست هدایت میشود. ### ۶. نکات فنی و محدودیتها * همزمانی (Concurrency): اگر دو کاربر همزمان سعی کنند محصولی را اضافه کنند، ممکن است یکی از درخواستها با خطا مواجه شود (چون فایل قفل شده است). این روش برای ترافیک بالا مناسب نیست. * Type Safety: تبدیل متن (String) داخل فایل به عدد (int.Parse) نیاز به دقت دارد؛ اگر فایل دستکاری شود، برنامه ممکن است کرش کند. * مسیر فایل: فایل در پوشه
Data(در کنار فایل اجرایی برنامه) ذخیره میشود. این پروژه یک نمونه عالی برای درک نحوه کارکرد سیستمهای مدیریت فایل و پایه و اساس دیتابیسها است.
TextFileShopProject.zip
حجم:
2.6M
فروشگاه حرفه ای به جای ذخیره در دیتابیس ذخیره در فایل text
RamDbLikeProject.zip
حجم:
2.5M
پروژه ای نوشتم که کنترلر نمیفهمد از دیتابیس می خواند یا فایل text
شبیه ساز Db Context و EFCore ساختم