با سلام
استاد من پروژه کور پیشرفته را با استفاده از این معماری دارم پیاده سازی می کنم و اما در مورد کد زیر سوالی برایم پیش آمده
در سرویس:
public ShowUsersListForAdminViewModel GetUsers(int pageId = 1, string filterEmail = "", string filterUserName = "")
{
IQueryable<User> result = _userRepository.GetUsers( filterEmail, filterUserName ) as IQueryable<User>;
// paging
int take = 20;
int skip = (pageId - 1) * take;
return new ShowUsersListForAdminViewModel()
{
Users = result.OrderBy( u => u.RegisterDate).Skip( skip ).Take( take ).ToList(),
CurrentPage = pageId,
PageCount = ( int )Math.Ceiling( ( decimal )result.Count() / take )
};
}
در ریپوزیتوری:
public IEnumerable<User> GetUsers(string filterEmail = "", string filterUserName = "")
{
var us = _context.Users.Where(u => u.UserName.Contains(filterUserName) || u.Email.Contains(filterEmail));
return us;
}
سوالات من:
1- آیا در این معماری و ساختار نیازی به IQueryable هست یا خیر؟
2- بهترین جا برای تعریف و کنترل IQueryable سرویس هست یا ریپوزیتوری؟
3- در کد مربوط به ریپوزیتوری من از && به جای || استفاده کردم و مشکلی که وجود داره این هست که به این متد null ارسال میشه موقع کوئری زدن هم مقدار null را در نطر می گیرد. مگر نباید "" را قرار بدهد؟ مشکل از کجاست؟
سلام
به معماری مربوط نیست دوست من
هرجا لازم داشته باشیم کوئری که روی منبعی میزنیم Lazy باشه و در صورت نیاز اجرا بشه از IQueryable استفاده میکنیم
الان کاری من اینجا انجام دادم درست هست؟
یعنی در ریپوزیتوری لیزی هست و در سرویس هم به صورت IQueryable گرفته شده و در نهایت اجرا شده
بله
در کد مربوط به ریپوزیتوری من از && به جای || استفاده کردم و مشکلی که وجود داره این هست که به این متد null ارسال میشه موقع کوئری زدن هم مقدار null را در نطر می گیرد. مگر نباید "" را قرار بدهد؟ مشکل از کجاست؟
ممنون میشم این مورد را هم پاسخ بدین
Null قرار دهید
استاد در معماری تمییز کار معقولی هست که در قسمت سرویس هم از دستورات Linq استفاده بشه مثلا whrer ؟
بله
لایه منطق هست و ممکنه در جایی تصمیم بگیره دیتا رو فیلتر کنه ولی کوئری روی خود بانک نباید بزنه و وظیفه Repository هست
منظورتون این است که در لایه منطق از context استفاده نشه و بقیه دستورات لینک برای فیلترکردن مجاز هستند؟
بله