نکات:
برای هر اکشن POST، از [HttpPost] و [ValidateAntiForgeryToken] استفاده شده است تا اطمینان حاصل شود که درخواستها از منابع معتبری ارسال شدهاند و امنیت فرمها حفظ میشود.
UserRepository به عنوان یک منبع داده برای دسترسی به کاربران استفاده شده است.
در ASP.NET Core MVC، ویوها (Views) برای نمایش اطلاعات به کاربر استفاده میشوند. برای ایجاد و مدیریت ویوها در کنترلر، میتوانید از اکشنهای مختلف استفاده کنید که هر کدام ویوهای متفاوتی را نمایش میدهند.
مراحل ایجاد و مدیریت ویوها در کنترلر:
ایجاد ویوها:
ویوهای خود را در پوشه Views ایجاد کنید. نام پوشه باید مطابق با نام کنترلر باشد (بدون پسوند "Controller").
ویوها معمولاً با پسوند .cshtml ایجاد میشوند.
تعریف اکشنها در کنترلر:
اکشنهایی را در کنترلر تعریف کنید که ویوهای مختلف را برمیگردانند.
مثال:
فرض کنید یک کنترلر به نام HomeController دارید و میخواهید چند ویو مختلف برای نمایش اطلاعات مختلف ایجاد کنید.
کنترلر (HomeController.cs):
public class HomeController : Controller
{
// اکشن برای ویوی Index
public IActionResult Index()
{
return View();
}
// اکشن برای ویوی About
public IActionResult About()
{
return View();
}
// اکشن برای ویوی Contact
public IActionResult Contact()
{
return View();
}
}
ویوها:
ویوی Index (Views/Home/Index.cshtml):
@model YourNamespace.Models.SomeModel
<h1>صفحه اصلی</h1>
<p>این محتوای صفحه اصلی است.</p>
ویوی About (Views/Home/About.cshtml):
<h1>درباره ما</h1>
<p>این محتوای صفحه درباره ما است.</p>
ویوی Contact (Views/Home/Contact.cshtml):
<h1>تماس با ما</h1>
<p>این محتوای صفحه تماس با ما است.</p>
توضیحات:
Index: اکشنی است که ویوی Index را برمیگرداند. ویوی مربوطه در پوشه Views/Home/Index.cshtml قرار دارد.
About: اکشنی است که ویوی About را برمیگرداند. ویوی مربوطه در پوشه Views/Home/About.cshtml قرار دارد.
Contact: اکشنی است که ویوی Contact را برمیگرداند. ویوی مربوطه در پوشه Views/Home/Contact.cshtml قرار دارد.
با این روش، میتوانید چندین ویو را با اکشنهای مختلف در یک کنترلر مدیریت کنید. هر اکشن یک ویوی خاص را برمیگرداند که محتوای مربوط به آن اکشن را نمایش میدهد.
برای ساخت یک کنترلر در ASP.NET Core MVC که شامل عملیات CRUD (ایجاد، خواندن، بهروزرسانی و حذف) برای موجودیتی با فیلدهای Id, Name, Age, Mobile و Email باشد، نیاز به ایجاد چند View دارید. در اینجا یک راهنمایی کلی برای ایجاد این Views و کنترلر آورده شده است:
مدل (Model):
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Mobile { get; set; }
public string Email { get; set; }
}
کنترلر (Controller):
public class PersonsController : Controller
{
private readonly ApplicationDbContext _context;
public PersonsController(ApplicationDbContext context)
{
_context = context;
}
// GET: Persons
public async Task<IActionResult> Index()
{
return View(await _context.Persons.ToListAsync());
}
// GET: Persons/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var person = await _context.Persons
.FirstOrDefaultAsync(m => m.Id == id);
if (person == null)
{
return NotFound();
}
return View(person);
}
// GET: Persons/Create
public IActionResult Create()
{
return View();
}
// POST: Persons/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Name,Age,Mobile,Email")] Person person)
{
if (ModelState.IsValid)
{
_context.Add(person);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(person);
}
// GET: Persons/Edit/5
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var person = await _context.Persons.FindAsync(id);
if (person == null)
{
return NotFound();
}
return View(person);
}
// POST: Persons/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Id,Name,Age,Mobile,Email")] Person person)
{
if (id != person.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
_context.Update(person);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!PersonExists(person.Id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
return View(person);
}
// GET: Persons/Delete/5
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var person = await _context.Persons
.FirstOrDefaultAsync(m => m.Id == id);
if (person == null)
{
return NotFound();
}
return View(person);
}
// POST: Persons/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var person = await _context.Persons.FindAsync(id);
_context.Persons.Remove(person);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
private bool PersonExists(int id)
{
return _context.Persons.Any(e => e.Id == id);
}
}
ویوها (Views):
Index.cshtml:
لیست اشخاص
Details.cshtml:
نمایش جزئیات یک شخص
Create.cshtml:
فرم ایجاد یک شخص جدید
Edit.cshtml:
فرم ویرایش یک شخص
Delete.cshtml:
فرم تأیید حذف یک شخص
بیایید ادامهی کدهای ویو را با هم بررسی کنیم تا کامل شوند:
Viewها:
Index.cshtml
این فایل لیست تمامی اشخاص را نمایش میدهد:
@model IEnumerable<Person>
@{
ViewData["Title"] = "Persons List";
}
<h2>Persons List</h2>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Mobile</th>
<th>Email</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Name</td>
<td>@item.Age</td>
<td>@item.Mobile</td>
<td>@item.Email</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>
<a asp-action="Create">Create New Person</a>
Details.cshtml
این فایل جزئیات یک شخص خاص را نمایش میدهد:
@model Person
@{
ViewData["Title"] = "Person Details";
}
<h2>Person Details</h2>
<div>
<h4>Person</h4>
<hr />
<dl class="row">
<dt class = "col-sm-2">Name</dt>
<dd class = "col-sm-10">@Model.Name</dd>
<dt class = "col-sm-2">Age</dt>
<dd class = "col-sm-10">@Model.Age</dd>
<dt class = "col-sm-2">Mobile</dt>
<dd class = "col-sm-10">@Model.Mobile</dd>
<dt class = "col-sm-2">Email</dt>
<dd class = "col-sm-10">@Model.Email</dd>
</dl>
</div>
<div>
<a asp-action="Edit" asp-route-id="@Model.Id">Edit</a> |
<a asp-action="Index">Back to List</a>
</div>
Create.cshtml
این فایل فرم ایجاد یک شخص جدید را نمایش میدهد:
@model Person
@{
ViewData["Title"] = "Create Person";
}
<h2>Create Person</h2>
<h4>Person</h4>
<hr />
<form asp-action="Create">
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Age" class="control-label"></label>
<input asp-for="Age" class="form-control" />
<span asp-validation-for="Age" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Mobile" class="control-label"></label>
<input asp-for="Mobile" class="form-control" />
<span asp-validation-for="Mobile" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Email" class="control-label"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
<div>
<a asp-action="Index">Back to List</a>
</div>
Edit.cshtml
این فایل فرم ویرایش یک شخص موجود را نمایش میدهد:
@model Person
@{
ViewData["Title"] = "Edit Person";
}
<h2>Edit Person</h2>
<h4>Person</h4>
<hr />
<form asp-action="Edit">
<div class="form-group">
<input type="hidden" asp-for="Id" />
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Age" class="control-label"></label>
<input asp-for="Age" class="form-control" />
<span asp-validation-for="Age" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Mobile" class="control-label"></label>
<input asp-for="Mobile" class="form-control" />
<span asp-validation-for="Mobile" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Email" class="control-label"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</form>
<div>
<a asp-action="Index">Back to List</a>
</div>
Delete.cshtml
این فایل فرم تأیید حذف یک شخص را نمایش میدهد:
@model Person
@{
ViewData["Title"] = "Delete Person";
}
<h2>Delete Person</h2>
<h4>Person</h4>
<hr />
<dl class="row">
<dt class = "col-sm-2">Name</dt>
<dd class = "col-sm-10">@Model.Name</dd>
<dt class = "col-sm-2">Age</dt>
<dd class = "col-sm-10">@Model.Age</dd>
<dt class = "col-sm-2">Mobile</dt>
<dd class = "col-sm-10">@Model.Mobile</dd>
<dt class = "col-sm-2">Email</dt>
<dd class = "col-sm-10">@Model.Email</dd>
</dl>
<form asp-action="Delete">
<input type="hidden" asp-for="Id" />
<input type="submit" value="Delete" class="btn btn-danger" /> |
<a asp-action="Index">Back to List</a>
</form>
به این ترتیب میتوانید کنترلر و ویوهای مورد نیاز برای عملیات CRUD را در ASP.NET Core MVC ایجاد کنید.
WebApplication4.zip
حجم:
18.3M
پروژه Scaffolding
آدرس اکشن
localhost:28987/scaffoldinguser
شخصیسازی کدهای ایجاد شده توسط Scaffolding و آشنایی با T4 Templates.
شخصیسازی کدهای ایجاد شده توسط Scaffolding
برای شخصیسازی کدهایی که توسط Scaffolding تولید میشوند، میتوانید از تغییرات در الگوهای پیشفرض استفاده کنید. Scaffolding کدهای ابتدایی برای عملیاتهای CRUD و سایر کدهای مورد نیاز را به صورت خودکار ایجاد میکند، اما شما میتوانید این الگوها را تغییر دهید یا الگوهای خود را اضافه کنید تا به نیازهای خاص پروژهتان بپردازید.
مراحل شخصیسازی:
نصب پکیجهای مورد نیاز: ابتدا باید ابزارهای لازم برای Scaffolding را نصب کنید.
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
اجرای دستور Scaffolding: اجرای دستور Scaffolding برای ایجاد کنترلر، ویو و سایر موارد مورد نیاز.
dotnet aspnet-codegenerator controller -name ProductsController -m Product -dc ApplicationDbContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
شخصیسازی کدها: بعد از ایجاد کدها توسط Scaffolding، شما میتوانید کدها را به صورت دستی شخصیسازی کنید. به عنوان مثال، میتوانید فیلدهای اضافی اضافه کنید، نام کلاسها را تغییر دهید، روشهای اعتبارسنجی خاص خود را پیادهسازی کنید و غیره.
T4 Templates چیست؟
T4 (Text Template Transformation Toolkit)
یک موتور تولید کد در ویژوال استودیو است که به شما امکان میدهد فایلهای متنی (مثل کدهای C#, HTML, XML و ...) را به صورت پویا تولید کنید. T4 Templates میتوانند برای تولید کدهای پویای پیچیده و شخصیسازی الگوهای Scaffolding استفاده شوند.
استفاده از T4 Templates:
ایجاد یک T4 Template: برای ایجاد یک T4 Template، باید یک فایل با پسوند .tt ایجاد کنید.
نمونه T4 Template:
// MyTemplate.tt
<#@ template language="C#" #>
<#@ output extension=".cs" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Text" #>
namespace GeneratedCode
{
public class GeneratedClass
{
public string GeneratedProperty { get; set; }
}
}
تولید کد با T4 Template: بعد از ذخیره فایل .tt، ویژوال استودیو به صورت خودکار کد تولید شده را ایجاد میکند. شما میتوانید از این کدهای تولید شده در پروژه خود استفاده کنید.
شخصیسازی T4 Templates برای Scaffolding: برای شخصیسازی Scaffolding با استفاده از T4 Templates، میتوانید الگوهای Scaffolding پیشفرض را تغییر دهید یا الگوهای جدیدی ایجاد کنید.
نتیجه:
با استفاده از T4 Templates، میتوانید کدهای تولید شده را به صورت پویا و براساس نیازهای پروژهتان شخصیسازی کنید. این کار به شما امکان میدهد تا الگوهای Scaffolding را تغییر دهید و بهبود بخشید.
در ASP.NET Core MVC، Binding یا اتصال دادهها فرآیندی است که طی آن دادههای ورودی از درخواست HTTP به پارامترهای اکشن کنترلر یا مدلهای دادهای تبدیل میشوند. این فرآیند به شما امکان میدهد تا دادهها را به راحتی از فرمهای HTML، درخواستهای URL و سایر منابع به مدلهای C# در سرور بفرستید و آنها را پردازش کنید.
انواع Binding:
Model Binding: Model Binding
دادههای ورودی را به پارامترهای اکشن کنترلر یا مدلها تبدیل میکند. این فرآیند شامل تبدیل دادهها از انواع مختلف (مثل رشتهها، اعداد، و غیره) به انواع دادهای مدلهای C# است.
public IActionResult Create(User user)
{
if (ModelState.IsValid)
{
// پردازش دادههای کاربر
}
return View(user);
}
Parameter Binding:
میتوانید دادهها را به صورت مستقیم به پارامترهای اکشن متصل کنید.
public IActionResult Details(int id)
{
// دریافت اطلاعات کاربر با استفاده از شناسه
var user = _userRepository.Find(id);
return View(user);
}
Form Binding:
دادههای ارسال شده از فرمها به پارامترهای اکشن یا مدلها متصل میشوند.
<form asp-action="Create" method="post">
<input type="text" name="UserName" />
<input type="text" name="Email" />
<button type="submit">ثبت نام</button>
</form>
نحوه کار Model Binding:
1-نامها و مقادیر: Model Binding با استفاده از نامهای فیلدها در فرم، دادهها را از درخواستها استخراج میکند و آنها را به مدل یا پارامترهای اکشن متصل میکند.
2-نوع دادهها: Model Binding دادهها را به نوعهای مناسب تبدیل میکند (مثلاً از رشته به عدد صحیح).
3-خطایابی: اگر دادهها قابل تبدیل نباشند یا خطای دیگری در اتصال وجود داشته باشد، خطاها در ModelState ثبت میشوند.
مثال کامل:
فرض کنید یک مدل کاربر و یک فرم HTML برای ثبتنام کاربر دارید:
مدل (User.cs):
public class User
{
public string UserName { get; set; }
public string Email { get; set; }
}
ویو (Register.cshtml):
@model YourNamespace.Models.User
<form asp-action="Register" method="post">
<div>
<label asp-for="UserName"></label>
<input asp-for="UserName" />
</div>
<div>
<label asp-for="Email"></label>
<input asp-for="Email" />
</div>
<button type="submit">ثبت نام</button>
</form>
کنترلر (UserController.cs):
public class UserController : Controller
{
[HttpPost]
public IActionResult Register(User user)
{
if (ModelState.IsValid)
{
// پردازش دادههای کاربر
TempData["Message"] = "ثبتنام موفقیتآمیز بود!";
return RedirectToAction("Index");
}
return View(user);
}
}
در این مثال:
دادههای فرم HTML به مدل User متصل میشوند.
متد Register در کنترلر دادههای متصل شده را دریافت میکند و اگر دادهها معتبر باشند، آنها را پردازش میکند.
با استفاده از Binding، میتوانید به راحتی دادههای ورودی را به مدلهای C# تبدیل کنید و آنها را پردازش کنید، که این فرآیند توسعه برنامههای وب را سادهتر و کارآمدتر میکند.
var searchKey = HttpContext.Request.Query["searchkey"].ToString();
این خط کد در زبان برنامهنویسی C# و در چارچوب ASP.NET Core استفاده میشود و به دنبال مقدار یک پارامتر کوئری (query parameter) به نام "searchkey" در درخواست HTTP جاری است. این پارامتر میتواند در URL درخواست وجود داشته باشد. بیایید این را به صورت جزئیتر بررسی کنیم:
اجزای کد:
HttpContext:
HttpContext شامل اطلاعات مربوط به درخواست جاری HTTP و پاسخ مرتبط با آن است.
این شیء در یک کنترلر ASP.NET Core به صورت پیشفرض در دسترس است.
Request:
Request شامل اطلاعاتی درباره درخواست جاری، از جمله هدرها، کوئری استرینگها، فرمها، و غیره است.
Query:
Query یک مجموعه است که شامل تمام پارامترهای کوئری (query parameters) از URL درخواست جاری است. این پارامترها معمولاً پس از ? در URL قرار میگیرند.
به عنوان مثال، در URL https://example.com?searchkey=value، searchkey یک پارامتر کوئری است.
["searchkey"]:
این قسمت به دنبال یک پارامتر کوئری به نام "searchkey" در مجموعه کوئریها میگردد. اگر پارامتر "searchkey" وجود داشته باشد، مقدار آن برگردانده میشود.
ToString():
ToString() مقدار یافت شده را به رشته تبدیل میکند.
مثال:
فرض کنید شما یک URL به صورت زیر دارید:
https://example.com?searchkey=mysearchterm
در کد بالا:
HttpContext.Request.Query["searchkey"] مقدار mysearchterm را برمیگرداند.
ToString() اطمینان میدهد که مقدار به صورت رشته (string) استفاده میشود.
استفاده در اکشن کنترلر:
یک مثال کاربردی از این کد در یک اکشن کنترلر میتواند به صورت زیر باشد:
public IActionResult Search()
{
var searchKey = HttpContext.Request.Query["searchkey"].ToString();
// استفاده از searchKey برای جستجو در پایگاه داده یا منطق دیگر
var results = _searchService.Search(searchKey);
return View(results);
}
در این مثال، مقدار searchkey از URL خوانده شده و برای انجام عملیات جستجو استفاده میشود.
میتوانید پارامتر searchkey را مستقیماً به عنوان پارامتر اکشن کنترلر تعریف کنید. این روش معمولاً سادهتر و خواناتر است و به ASP.NET Core اجازه میدهد به صورت خودکار دادههای کوئری استرینگ را به پارامترهای اکشن متصل کند.
مثال:
کنترلر با پارامتر اکشن:
public IActionResult Search(string searchkey)
{
// استفاده از searchkey برای جستجو در پایگاه داده یا منطق دیگر
var results = _searchService.Search(searchkey);
return View(results);
}
در این مثال:
پارامتر searchkey به طور خودکار مقدار داده شده از کوئری استرینگ را دریافت میکند.
نیاز به استفاده مستقیم از HttpContext.Request.Query در اکشن نیست.
مثال URL:
برای درخواست به این اکشن، میتوانید از یک URL به صورت زیر استفاده کنید:
https://example.com/Search?searchkey=mysearchterm
در این حالت، searchkey به صورت خودکار با مقدار mysearchterm مقداردهی میشود و به اکشن ارسال میشود.
این روش به شما امکان میدهد که کد خود را سادهتر و خواناتر کنید و از مزایای اتصالات خودکار دادهها در ASP.NET Core بهرهمند شوید.
در ASP.NET Core، From attributes برای مشخص کردن منبع دادههای ورودی استفاده میشود که به پارامترهای اکشن کنترلر متصل میشوند. این attributes به شما امکان میدهند که دادهها را از منابع مختلفی مانند کوئری استرینگها، بدنه درخواست (request body)، هدرها، و غیره دریافت کنید. این ویژگیها به مدل بایندینگ کمک میکنند تا دادههای ورودی را به درستی به پارامترهای اکشن متصل کنند.
انواع From Attributes:
[FromQuery]:
این attribute مشخص میکند که دادهها از کوئری استرینگ درخواست خوانده شوند.
مثال:
public IActionResult Get([FromQuery] string searchkey)
{
// searchkey از کوئری استرینگ گرفته شده است.
}
[FromRoute]:
این attribute مشخص میکند که دادهها از پارامترهای مسیر (route parameters) خوانده شوند.
مثال:
[HttpGet("{id}")]
public IActionResult GetById([FromRoute] int id)
{
// id از پارامتر مسیر گرفته شده است.
}
[FromBody]:
این attribute مشخص میکند که دادهها از بدنه درخواست (request body) خوانده شوند.
مثال:
[HttpPost]
public IActionResult Create([FromBody] User user)
{
// user از بدنه درخواست گرفته شده است.
}
[FromHeader]:
این attribute مشخص میکند که دادهها از هدرهای HTTP خوانده شوند.
مثال:
public IActionResult GetFromHeader([FromHeader] string authorization)
{
// authorization از هدر HTTP گرفته شده است.
}
[FromForm]:
این attribute مشخص میکند که دادهها از فرمهای HTML خوانده شوند.
مثال:
[HttpPost]
public IActionResult Create([FromForm] User user)
{
// user از دادههای فرم HTML گرفته شده است.
}
[FromServices]:
این attribute مشخص میکند که پارامتر از سرویسهای DI (Dependency Injection) پر شود.
مثال:
public IActionResult GetService([FromServices] IMyService myService)
{
// myService از سرویسهای DI گرفته شده است.
}
مثال عملی:
فرض کنید میخواهید یک اکشن کنترلر داشته باشید که اطلاعات کاربری را با استفاده از چندین منبع ورودی دریافت کند:
public class UserController : Controller
{
[HttpPost]
public IActionResult Create(
[FromQuery] string referrer,
[FromBody] User user,
[FromHeader] string authorization)
{
// دریافت دادهها از منابع مختلف:
// referrer از کوئری استرینگ
// user از بدنه درخواست
// authorization از هدر HTTP
// پردازش دادهها و ایجاد کاربر جدید
}
}
با استفاده از From attributes، میتوانید به وضوح مشخص کنید که دادههای ورودی از کجا باید گرفته شوند و این کار باعث میشود کدهای کنترلر شما تمیزتر و قابل نگهداریتر باشند.
قوانین کد نویسی تمیز متد ها نباید بیش از سه پارامتر ورودی داشته باشد و اگر بیش از سه پارامتر ورودی داشتید از مدل ها استفده کنید
یکی از اصول کلیدی در کد نویسی تمیز است که توسط نویسندگان معروفی چون رابرت سی. مارتین (Robert C. Martin) در کتاب "کد تمیز" (Clean Code) مطرح شده است. این قانون پیشنهاد میکند که تعداد پارامترهای ورودی به متدها باید کمینه باشد، و در صورت نیاز به بیش از سه پارامتر، بهتر است از مدلها (کلاسهای دادهای) استفاده شود.
دلایل برای استفاده از این قانون:
قابلیت خوانایی و نگهداری:
متدهایی با تعداد پارامترهای کمتر، خواناتر و قابل نگهداریتر هستند. این متدها معمولاً سادهتر و قابل فهمتر هستند.
کاهش پیچیدگی:
تعداد زیاد پارامترها میتواند منجر به پیچیدگی بالای متد شود، که فهمیدن و تست کردن آن را دشوار میکند.
کاهش احتمال اشتباه:
هنگامی که تعداد پارامترها زیاد باشد، احتمال بروز اشتباه در ترتیب یا نوع دادهها افزایش مییابد.
استفاده از مدلها:
در صورتی که نیاز به بیش از سه پارامتر دارید، میتوانید این پارامترها را در یک کلاس دادهای (مدل) تعریف کنید و از آن در متدها استفاده کنید.
مثال:
فرض کنید متدی دارید که نیاز به چندین پارامتر برای ایجاد یک کاربر جدید دارد.
بدون استفاده از مدل:
public void CreateUser(string firstName, string lastName, int age, string email, string phoneNumber)
{
// کد ایجاد کاربر
}
با استفاده از مدل:
ابتدا یک مدل برای کاربر ایجاد کنید:
public class UserModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
}
سپس متد را با استفاده از مدل تغییر دهید:
public void CreateUser(UserModel user)
{
// کد ایجاد کاربر با استفاده از مدل
}
مزایای استفاده از مدل:
کاهش تعداد پارامترها: مدلها تعداد پارامترهای ورودی به متد را کاهش میدهند و کد را خواناتر میکنند.
بهبود سازماندهی دادهها: مدلها به شما امکان میدهند تا دادههای مرتبط را به صورت منسجم و منظم نگه دارید.
افزایش قابلیت توسعه: افزودن یا تغییر پارامترها در آینده سادهتر خواهد بود.
با رعایت این اصل، کدهای شما خواناتر، قابل نگهداریتر و قابل توسعهتر خواهند بود. اگر سوالات دیگری دارید یا نیاز به توضیحات بیشتری دارید، بفرمایید!