Дизайн OO по сравнению с проектированием баз данных

ИМХО самый большой недостаток настройки вашего собственного стека заключается в том, что вам нужно управлять такими вещами, как запуск Node.js forever, запускать его как демон, переносить его за обратный прокси-сервер, такой как Nginx, и т. Д. ... Самое замечательное в Node.js - сделать запуск веб-сервера однострочным - это один из его самых больших недостатков, когда речь идет о готовых к работе системах.

Кроме того, у вас есть все вопросы управления, обновления и защиты вашего сервера самостоятельно.

С хостерами все намного проще: обычно это git push и все. Масштабирование? Легко. Репликация? Легко. ...? Легко. Все в несколько кликов.

Недостаток хостеров в том, что вы не можете настроить среду. Хорошо, вы, вероятно, можете выбрать, какую версию Node.js и / или npm запускать, но это все. Вы не можете контролировать, какое стороннее программное обеспечение установлено. У вас нет контроля над ОС. Вы не можете контролировать расположение серверов. И так далее ...

Конечно, некоторые хостеры предоставляют вам доступ к некоторым из этих вещей, но редко есть хостер, который поддерживает все.

Таким образом, в основном вопрос относительно Node.js такой же, как и с технологиями друг друга: это преимущество против индивидуализма, ценообразования, масштабируемости, надежности, знаний, ...

Лично я решил пойти с хостером: время и усилия, которые я экономлю, легко превосходят недостатки. Имейте в виду: лично для меня.

На этот вопрос нужно ответить индивидуально.

5
задан user366312 16 June 2009 в 12:20
поделиться

7 ответов

Во-первых, если вы создали один класс TransactionDA и проверили типы внутри класса для выполнения операций CRUD, вы нарушите Принцип открытия / закрытия , поэтому я определенно не идите по этому пути.

Что касается предложений о том, как выполнить построение вашего DAL, я бы посоветовал следить за некоторыми сообщениями в блогах о людях, которые намного умнее меня, о том, что они думают по этой теме.

Репозиторий - это новый синглтон.

Репозиторий мертв: Да здравствует репозиторий

Ночь живых репозиториев

Я считаю, что разговор продолжается, но это должно помочь вам начать.

5
ответ дан 14 December 2019 в 01:15
поделиться

I would use an ORM such as NHibernate and use it's multi-table inheritance capabilities and then not have to worry about it myself.

3
ответ дан 14 December 2019 в 01:15
поделиться

I would use entity subtypes here. Create one table for the transactions (and as an earlier poster said, perhaps a different term would be better) and store everything that's common in there. Then create one "sub-type" table for each specialization. These subtype tables should have the same primary key as the main table (the "strong" entity) and the fields that are unique to that particular specialization. Each subtype is related to the strong entity in a one-to-one manner, with optional participation on the subtype end and required participation on the strong entity end.

Then, to make querying easier, define a view that (outer) joins the strong entity with all of the entity subtypes so that you can easily "see" everything.

Here's a simple (and common) example of how to set this up:

create table Employee (
  eid        int primary key,
  first_name text,
  last_name  text not null
)

create table Salaried (
  eid             int primary key,
  annualSalaryUSD money not null
)

create table Hourly (
  eid             int primary key,
  hourlyRateUSD   money not null
)  
3
ответ дан 14 December 2019 в 01:15
поделиться

I will do something like that

public abstract class DistributerTransaction
{
    DistributerDA dataaccess;
}
public class Indent : DistributerTransaction
{
}
public class Sell : DistributerTransaction
{
}
public class Stock : DistributerTransaction
{
}

public abstract class DistributerDA
{
   /*Read();
     Update();*/
}
public class IndentDA : DistributerDA
{
}
public class SellDA : DistributerDA
{
}
public class StockDA : DistributerDA
{
}
0
ответ дан 14 December 2019 в 01:15
поделиться

Вы можете использовать внедрение зависимостей, создать класс DA для каждого и заставить их всех реализовать один и тот же интерфейс ITransactionDA с вашими CRUD-операциями.

public interface ITransactionDA
{
  void Read();
  void Update();
...
}

public class StockDA : ITransactionDA
{
  //implement interface methods
}

Stock stock = new Stock(new StockDA());
2
ответ дан 14 December 2019 в 01:15
поделиться

Если вы знаете, что ваши данные попадают в три отдельные таблицы, тогда у меня обычно есть три отдельных класса DA.

Однако, если ваши таблицы практически идентичны, тогда вы может обобщить TransactionDA и упростить уровень данных. Я бы сделал это только в том случае, если бы вы знали, что у вас будет большой объем транзакций и вы собираетесь разделять свои таблицы на разные файлы или что-то в этом роде, иначе я бы, вероятно, просто упростил ситуацию и все это объединил.

Не пытайтесь для создания TransactionDA, если только все ваши отдельные типы транзакций чрезвычайно не похожи.

2
ответ дан 14 December 2019 в 01:15
поделиться
-6
ответ дан 14 December 2019 в 01:15
поделиться
Другие вопросы по тегам:

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