Как отследить изменения в бизнес-объектах?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

7
задан hazzen 17 September 2008 в 05:25
поделиться

3 ответа

Во-первых, можно использовать существующую платформу, которая решает эти проблемы, как CSLA.NET. Автор этой платформы занялся этими самыми проблемами. Перейдите к http://www.rockfordlhotka.net/cslanet/ для этого. Даже если Вы не используете полную платформу, понятия все еще применимы.

Если Вы хотели к самокрутке, что я сделал в прошлом, был к вместо того, чтобы использовать Список для моих наборов, я использовал пользовательский тип, полученный из BindingList. Inhereting от BindingList позволяет, Вы для переопределения поведения добавляете/удаляете объект. Таким образом, у Вас может, например, быть другой внутренний набор "delteted" объектов. Каждый раз переопределенные Удаляют метод, назван на Вашем наборе, помещает объект в "удаленный" набор и затем называют базовое внедрение Удалить метода. Можно сделать то же для добавленных объектов или измененных объектов.

6
ответ дан 7 December 2019 в 07:53
поделиться

Вы - пятно при о необходимости в единице работы, но не пишете ту. Используйте NHibernate или некоторый другой ORM. Для именно это они сделаны. Им встроили Единицу Работ.

Бизнес-объекты являются действительно "способом пойти" для большинства приложений. Вы погружаетесь в глубокую область и будет много обучения сделать. Изучите DDD.

Я также категорически не рекомендовал бы код как этот в Вашем коде - позади. Изучите шаблон MVP.

Я был бы также (в то время как я потрудился учиться, много новых, очень критических вещей) изучают ТЕЛО.

Можно хотеть проверить мирового судью Boodhoo только курс .NET, поскольку он покрывает много этих вещей.

2
ответ дан 7 December 2019 в 07:53
поделиться

Объекты данных не отслеживают изменения. Отслеживание изменений происходит на DataContext и возражает, что Вы получили через DataContext. Таким образом, для отслеживания изменений, необходимо сделать следующее:

public class FooDataContext : DataContext
{
   public Table<Order> Orders;   
}

public class Order
{
    [DbColumn(Identity = true)]
    [Column(DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]
    public int Id { get; set; }

    [DbColumn(Default = "(getutcdate())")]
    [Column(DbType = "DateTime", CanBeNull = false, IsDbGenerated = true)]
    public DateTime DateCreated { get; set; }

    [Column(DbType = "varchar(50)", CanBeNull = false, IsDbGenerated = false)]
    public string Name { get; set; }
}

Теперь в Вашем codebehind можно сделать что-то как:

public void UpdateOrder(int id, string name)
{
   FooDataContext db = new FooDataContext();
   Order order = db.Orders.Where(o=>o.Id == id).FirstOrDefault();

   if (order == null) return;

   order.Name = name;

   db.SubmitChanges();
}

Я не рекомендовал бы непосредственно использовать контекст данных в коде позади, но это - хороший способ начать с Linq К SQL. Я рекомендовал бы поместить все Ваши взаимодействия базы данных во внешний проект и вызов от GUI до классов, которые инкапсулируют это поведение.

Я рекомендовал бы создать Linq В файл Sql (dbml), если Вы плохо знакомы с Linq К Sql.

Щелкните правой кнопкой по своему проекту в проводнике решения, и выбор Добавляет Новый Объект. Выберите Linq В файл SQL, и он затем позволит Вам соединиться со своей базой данных и выбрать таблицы.

Можно затем посмотреть на сгенерированный код и надеть некоторые прекрасные идеи, как Linq К Sql работает и что можно сделать с ним.

Используйте это в качестве инструкции по работе с Linq к SQL, и это возьмет Вас далеко...

-1
ответ дан 7 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: