Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché Новый топик    Ответить
 Связь одного класса с другим  [new]
Rishat1c
Member

Откуда:
Сообщений: 13
Всем доброго дня суток,
Решил реализовать связь между двумя классами:

1 класс с параметрами - Name, Object, Amount и Price
где Object должен вытаскивать со 2 класса значение Object

2 класс с параметрами - Object, DateTime1, DateTime2
где Object должен передавать значение в 1 класс

Код первого класса
Property Name As %String;

/// Property Object As %String;
Property Amount As %Integer;

Property Price As %Double;

Relationship Object As Data.Object [ Cardinality = one, Inverse = Objects ];

Index ObjectIndex On Object;


Код второго класса

Property Object As %String;

Relationship Objects As Data.Company [ Cardinality = many, Inverse = Object ];

Property DataAdd As %TimeStamp;

Property DataEnd As %TimeStamp;


Правильная ли это связка?

Метод отображения данных первого класса
ClassMethod GetAllCompanies() As %Status
{
	
    set st=$$$OK
    try {
	// По умолчанию возвращает первые 100 записей. Для изменения надо добавить параметр pMaxRows
    do ##class(%ZEN.Auxiliary.jsonSQLProvider).%WriteJSONFromSQL(,"select * from Data.Company")
    } catch ex {
        set st=ex.AsStatus()
    }
    quit st
}


Добавление данных в первом классе
/// Создание нового объекта класса Data.Company
ClassMethod CreateCompany() As %Status
{
	s st=$$$OK
	try {
	// Берём JSON из запроса и конвертируем в объект класса Data.Company
	$$$THROWONERROR(st,##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(%request.Content,"Data.Company",.obj,1))
	// Сохраняем
	$$$THROWONERROR(st,obj.%Save())
	} 
	catch ex {
		s st=ex.AsStatus()
	}
	quit st
}


Заранее спасибо!
12 июн 17, 23:50    [20559085]     Ответить | Цитировать Сообщить модератору
 Re: Связь одного класса с другим  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3519
Rishat1c,

Не понял, что именно вы хотите сделать, для меня не понятны слова "вытаскивать" и "передавать" применительно к архитектуре классов. Но дам другие замечения.

Классы, называющиеся Object - обычно это очень плохо и очень редко оправдано. Неизвестно, что в вашем случае, но обычно оно означает отсутствие фантазии. Это как переменная var и процедура proc. Кажется нормальным, когда она одна, но что вы будете делать, когда классов будет несколько сотен? Это действительно настолько абстрактный класс, что иначе его назвать нельзя? Или сущность на русском языке называется "Объект"?

GetAllCompanies - куда Get? Вы не сможете передать компании этим методом из одного метода в другой. Скорее это WriteAllCompaniesToJSON

В методе CreateCompany неявно используется контекст, переменная %request. Это плохо, если класс не наследуется от %CSP.Page, а он у вас не наследуется. Ну и соответственно, вы таким названием отсекаете возможности создания компаний другим путем. Как вы назовете метод, если захотите явно создать компанию, зная ее название.

Отношение не могу проверить, потому что не понимаю его суть в вашем случае.
13 июн 17, 05:26    [20559283]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché Ответить