Шаблон Singleton и контейнер Контролируемый LifeTImeManager в Unity - PullRequest
2 голосов
/ 12 сентября 2010

Изменения в базе данных

1 - удален размер столбца из таблицы iC_ProductFeature

2 - Добавлена ​​новая таблица iC_ProductDimensions для хранения данных разных размеров продукта. ниже приведено подробное описание различных столбцов, используемых в iC_ProductDimensions

1- DimensionId - This is the primary key in the table and of bigint datatype.

2- UOMID -  (FK) Unit of Measurement ID , this is refrenced from the table iC_ProductUnitOfMeasure.

3- ProductFeatureId : This is referenced column from the iC_ProductFeature table.

4- NumericValue  : This column stores the dimensional value (e.g. if UOM is pound and this column stores 10 than we can say that Weight of product is 10 pound.

3 - В iC_ProductUnitOfMeasure добавлен один столбец «MeasurementType».

4 - Изменен тип данных ProductFeatureId на Bigint из varchar (100)

Поток данных

«MeasurementType» в iC_ProductUnitOfMeasure будет хранить измерение, для которого создана единица измерения.

e.g. let's take a snapshot view of  rows in iC_ProductUnitOfMeasure 


    UOMID  Abbrivation         MeasurementType         Description 

    1              lb          Weight           This UOM is used for measuring weight of the product 
    2              inch.       Width            This UOM is used for measuring width of the product 
    3              meter       Length           This UOM is used for measuring length of the product 
    4              Kg          Weight           This UOM is used for measuring weight  of product  in Kg.

в вышеприведенном примере мы пометили каждую UOM его ассоциативным MeasurementType.

UOM 1 может использоваться для измерения веса продукта в фунтах, аналогично UOM 4 может использоваться для измерения веса продукта в килограммах.

Добавление продукта с длиной продукта 0,5 метра, шириной продукта 50 дюймов и весом продукта 100 фунтов.

1 - создать запись в таблице iC_Product для хранения общих атрибутов продукта. (Suppopse ProductId = ICPR0001)

2- Создайте запись в iC_ProductFeature и сохраните общую функцию продукта, такую ​​как функции цвета, размера, размера и размера, если есть. (Предположим, ProductFeatureId = 1)

3- Создайте 3 записи в таблице iC_ProductDimesion, как показано ниже.

DimensionID UOMID ProductFeatureId NumericValue 
1           1     1                100 
2           2     1                50 
3           3     1                0.5 

4 - добавить запись в iC_ProductFeatureApplicability с помощью (ProductId = ICPR0001 и ProductFeatureId = 1)

Запрос данных для получения различных размерных значений продукта ICPR001

select 

          product .* , 
          productFeature.* ,
          ( CAST (dimension.NumericValue  as Varchar(100) )+" " + UOM.Abbrivation) as Dimension ,
          dimension.MeasurementType

         from 
                iC_Product product , 
                iC_ProductFeature productFeature , 
                iC_ProductFeatureApplicability , 
                iC_ProductDimesions dimension , 
                iC_ProductUnitOfMeasure UOM

where

 iC_ProductFeatureApplicability.ProductId = product.ProductId  

and 

 iC_ProductFeatureApplicability.ProductFeatureId = productFeature.ProductFeatureId 

and 

dimension.ProductFeatureId = productFeature.ProductFeatureId 

and 

dimension.UOMID= UOM.UOMID

and 

 product.ProductId = 'ICPR001'        

Ответы [ 2 ]

2 голосов
/ 12 сентября 2010

Истинный синглтон может быть создан только один раз (для каждого потока, в некоторых реализациях).

Управление временем жизни Unity - это просто вариант, при котором Unity всегда возвращает один и тот же экземпляр;маловероятно, что этот экземпляр будет спроектирован как одноэлементный, поэтому в принципе вы можете создать другие экземпляры вручную.

См. мой ответ на этот вопрос , чтобы узнать больше об этом различии.

0 голосов
/ 12 сентября 2010

Шаблон синглтона - это сам шаблон - Unity просто реализует этот шаблон в нескольких местах (включая большинство менеджеров времени жизни).

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

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

...