Пожалуйста, смотрите этот кодцентрализовать данные в Service Layer
public class MedierService : Singleton<MedierService>
{
PresseEntities _db = new PresseEntities();
IQueryable<Medier> _mediers;
public MedierService()
{
_mediers = _db.Mediers.Select(s => s);
}
public List<Medier> GetAll(MedierStatus m)
{
var retVal = Enumerable.Empty<Medier>();
switch (m)
{
case MedierStatus.New:
retVal = _mediers.Where(w => w.vis == 1 && w.dato_slettet == new DateTime(1900, 01, 01));
break;
case MedierStatus.Deleted:
retVal = _mediers.Where(w => w.vis == 1 && w.dato_slettet != new DateTime(1900, 01, 01));
break;
}
return retVal.ToList();
}
}
против
public class MedierService : Singleton<MedierService>
{
PresseEntities _db = new PresseEntities();
IQueryable<Medier> _GetAll()
{
return _db.Mediers.Select(s => s);
}
public List<Medier> GetAll(MedierStatus m)
{
var retVal = Enumerable.Empty<Medier>();
switch (m)
{
case MedierStatus.New:
retVal = _GetAll().Where(w => w.vis == 1 && w.dato_slettet == new DateTime(1900, 01, 01));
break;
case MedierStatus.Deleted:
retVal = _GetAll().Where(w => w.vis == 1 && w.dato_slettet != new DateTime(1900, 01, 01));
break;
}
return retVal.ToList();
}
}
Alright, поэтому выше коды будут оба возвращают меня точно такой же результат после вызова MedierService.Instance.GetAll(MedierStatus.New)
.
Я совершенно не знаком с C#, и я надеюсь, что мой код имеет смысл.
То, что я пытаюсь сделать здесь, состоит в том, чтобы сделать централизацию _mediers
и _GetAll
, поэтому я могу легко фильтровать результаты, если фильтр является глобальным, поэтому мне не нужно идти прямиком и помещать фильтр.
Теперь моя проблема
Я не знаю, если я делаю это правильно, в моем первом примере, я сделал это с помощью конструктора и создал переменную _mediers
, а на втором я просто создал частный метод с именем _GetAll()
.
Итак, вот мои вопросы: 1.) Каков правильный способ? Первый или следующий?
2.) Можно ли сделать _mediers
и _GetAll()
IQueryable, чтобы он не загружал все данные из моей базы данных и не позволял моим методам его фильтровать?
3.) Можно ли префикс подчеркивать мой метод _GetAll()
, потому что это частный метод?
4.) Есть ли способ улучшить мой код?
Все ваши ответы очень помогут мне и улучшат мои навыки кодирования. Спасибо так много
Ваш метод GetAll() может просто сказать 'return _db.Mediers' - выбор не требуется. Кроме того, соглашение об именовании подчеркивания должно использоваться для частных полей, но не для методов. Частные методы должны быть объявлены 'private' и начинаться с строчной буквы. –
Пожалуйста, ограничитесь одним вопросом на вопрос. Кроме того, в настоящее время ваш вопрос почти полностью основан на мнениях. Если у вас есть рабочий код, это ваш собственный код, и вы хотите знать, что вы можете сделать для его улучшения, [codereview.se] может быть лучшим сайтом. Пожалуйста, прочитайте их справочный центр, чтобы убедиться, что ваш вопрос по теме. –