Пересекающиеся Билиотеки

  • Автор темы zum
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Z
#1
Смысл такой
нужно функции из 1 ой использовать во второй и наоборот =)
как быть?)
 

savl

Lotus team
28.10.2011
2 136
105
#3
Вынести все функции, которые могут использоваться перекрестно в третью библиотеку. Или каждую разделить на 2 части: Core и Interface.

и никак иначе...
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#4
агентами
екзекуте

всё зависит как курить :D
 
A

ABarmin

#5
Вынести все функции, которые могут использоваться перекрестно в третью библиотеку. Или каждую разделить на 2 части: Core и Interface.

и никак иначе...
Расскажите подробнее о разделении библиотек на core и interface, пожалуйста.
 

savl

Lotus team
28.10.2011
2 136
105
#6
ABarmin
Это просто условные названия, назвать можно как угодно.
Смысл в том, чтобы выделить функции по общему признаку в одну библиотеку.
Функции работающие внутри системы, которые вызываются из других функций, записать в одной библиотеке.
Функции, которые вызывают внутренние функции записать в другую библиотеку.
Во второй сделать Use первой.

Мой подход разделять функции по библиотекам в зависимости от работы: внутренние (libName) и для работы с GUI (libName_UI)
Например, у меня куча функций для работы с пользовательским интерфейсом(выбор документов, открытие разных окон, поиск) объединяю их в одну библиотеку libname_UI, в весь механизм поиска осуществляется во внутренней библиотеке libName.
 
A

ABarmin

#7
ABarmin
Это просто условные названия, назвать можно как угодно.
Смысл в том, чтобы выделить функции по общему признаку в одну библиотеку.
Функции работающие внутри системы, которые вызываются из других функций, записать в одной библиотеке.
Функции, которые вызывают внутренние функции записать в другую библиотеку.
Во второй сделать Use первой.

Мой подход разделять функции по библиотекам в зависимости от работы: внутренние (libName) и для работы с GUI (libName_UI)
Например, у меня куча функций для работы с пользовательским интерфейсом(выбор документов, открытие разных окон, поиск) объединяю их в одну библиотеку libname_UI, в весь механизм поиска осуществляется во внутренней библиотеке libName.
А я подумал, что это как-то решает проблемы с циклическими зависимостями. Мы в проекте выделили классы для работы с определенным типом документа в СЭД в одну библиотеку, но так как типов документов много и они сложно связаны между собой встает проблема связывания этих библиотек - возникают циклические зависимости.

Нет никакого а-ля нормальный лоадер для лотуса? Ну, кроме execute |User "some"|, конечно?)
 
Z
#8
плохо себе представляю как это можно разделить...

те первая библиотека отвечает за документы класс DocumentManager
вторая отвечает за расписание класс TimeManager

те получается что из первой надо проверять расписание при определенных условиях, а из второй документы при работе с раписанием

хоть убейте не представляю как это сделать даже через третью библиотеку
 

nvyush

Lotus team
22.04.2009
2 317
0
#9
Можно:
1) параметры функций проверки сделать типа Variant;
2) для классов DocumentManager и TimeManager сделать базовый класс(ы).
Вы бы хоть описания функций привели, чтобы было о чём рассуждать.
 
A

ABarmin

#10
С вариантом не катит совсем, классов уже больше двух десятков, методов в каждом больше 50, без автоподстановки просто замучаешься.
 
A

ABarmin

#14
Задача не расширить функциональность одного класса другим, не дать ему дополнительное поведение динамически, а связать две библиотеки в обе стороны, если они зависят друг от друга.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#15
задача увязать разный ф-ционал, кот. может наращиваться
 
A

ABarmin

#16
Если все части функционала находятся в одной либе, то тут и проблем нет, хоть декоратором, хоть наследованием.

Ладно, смотрим пример.

Библиотека data.lotus.DTProcess

Код:
Use "data.lotus.DTTask"

public class DTProcess as DTDocument
private tasks as DTList

public function getTasks() as DTList
if (me.tasks is nothing) then
set me.tasks = new DTList()

' получение объектов DTTask волшебным кодом
end if
set getTasks = me.tasks
end function
end class
Библиотека data.lotus.DTTask

Код:
public class DTTask as DTDocument
private parentProcess as DTProcess

public function getParentProcess() as DTProcess
if (me.parentProcess is nothing) then
' получение объекта DTProcess волшебным кодом
end if
set getParentProcess = me.parentProcess
end function
end class
Чтобы второй класс заработал надо подключить data.lotus.DTProcess, что вызовет ошибку компиляции про рекурсивный USE.
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#17
Зачем давать на буржуинским, если то же самое есть на русском?

Добавлено:
Если все части функционала находятся в одной либе, то тут и проблем нет, хоть декоратором, хоть наследованием.
Вы сами ответили на свой вопрос + ещё выше люди всё сказали.
Без одной библиотеки либо без классов-интерфейсов в 3-й общей либо без использования Execute, т.е. так, как вы хотите (вероятно волшебным образом), оно работать не будет, так чего возить г-но по унитазу?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#18
Зачем давать на буржуинским, если то же самое есть на русском?
родной язык для большинства "технологий" - англицкий, интерпретация в русской версии может сильно отличаться
 
A

ABarmin

#19
Зачем давать на буржуинским, если то же самое есть на русском?

Добавлено: Вы сами ответили на свой вопрос + ещё выше люди всё сказали.
Без одной библиотеки либо без классов-интерфейсов в 3-й общей либо без использования Execute, т.е. так, как вы хотите (вероятно волшебным образом), оно работать не будет, так чего возить г-но по унитазу?
Остается только Execute.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#20
в практике д.б. стремление к "правильности" архитектуры...
создать кучу кода и либ, в кот. разобраться трудно - чревато
 
Статус
Закрыто для дальнейших ответов.