У меня есть три типа условий, которые я ловлю.
Плохой или недостающий вход не должен быть исключением. Используйте и сторону клиента js и сторону сервера regex, чтобы обнаружить, установить атрибуты и передать назад той же странице с сообщениями.
AppException. Это обычно - исключение, которое Вы обнаруживаете и бросаете с в свой код. Другими словами, это, которые Вы ожидаете (файл не существует). Зарегистрируйте его, установите сообщение и передайте назад общей ошибочной странице. Эта страница обычно имеет немного информации о том, что произошло.
непредвиденная исключительная ситуация. Они - те, Вы не знаете о. Зарегистрируйте его с деталями и передайте им общей ошибочной странице.
Hope это помогает
Другое возможное решение - объявить Employee как: -
public class Employee
{
public int Id { get; internal set; }
}
... при условии, что классы Employee и DAL находятся в одной сборке
Я не утверждаю, что это нравится, но Я его использовал.
Как насчет того, чтобы разрешить только коду вне DAL ссылаться на объект через интерфейс, который не предоставляет установщик для поля Id (и любых других неизменяемых полей):
public interface IEmployee
{
Int32 Id {get;}
String Name {get;set;}
// ... and so on ...
}
public class Employee: IEmployee
{
Int32 Id {get;set;}
String Name {get;set;}
}
DAL может установить его как требуется, но код потребления не может.
Вы можете сделать свой установщик для ID allow set только в том случае, если он еще не был установлен ранее:
public class Employee
{
private int? m_ID;
public int? ID
{
get { return m_ID; }
set
{
if (m_ID.HasValue())
throw ...
m_ID = value;
}
}
}
В качестве альтернативы, я думаю, что некоторые фреймворки поддерживают этот тип функциональности (например, я думаю NHibernate позволит вам иметь частный установщик в поле идентификатора).
Как насчет:
Employee employee = new Employee(EmployeeDAL.GetNextID());
Это также должно упростить ваш код сохранения.
Вы можете сделать так, чтобы ваш метод DAL просто возвращал обновленный объект:
public class EmployeeDAL
{
Employee EmployeeDAL.Save (Employee employee)
{
// Save employee
// Get the newly generated ID
// Recreate the object with the new ID and return it
}
}
В качестве альтернативы вы можете сгенерировать новый идентификатор в коде создайте экземпляр объекта с этим идентификатором, затем попросите свой DAL сохранить его.
Если вы хотите, чтобы ваш объект был обновлен во время операции сохранения, вам нужно сделать это свойство общедоступным.
Лично мне нравится создавать ] неизменяемые объекты, те, которые вы можете настроить только один раз, передав все значения в конструктор. При таком подходе вы просто создаете объект для сохранения, затем извлекаете его обратно вместе с назначенным идентификатором из базы данных и возвращаете его вызывающей стороне.