Smalltalk по-русски
четверг, Февраль 10, 2005
GemStone: Где хранить серверный код
При работе с GemStone возникает вопрос где писать и хранить серверные методы. Конечно, в GemStone есть свой браузер и можно создавать методы там, при этом методы будут храниться в GemStone.

Но в этом случае возникает два больших вопроса:

1. Как рефакторить такой код.

2. Как вести версионый контроль.

Одно из возможных решений – писать серверные методы на клиенте с последующей копированием методов на сервер. Так как мы пишем весь код на клиенте, то проблем с рефакторингом и версионным контролем не будет.

Скопируем на сервер все методы которые находятся в категориях с названием ‘server methods’

filter := MethodCollector new protocol: 'server methods1'.
methodDefinitions := (MethodCollector new select: filter).

methodDefinitions do: 
	[:each | 
	"Копируем метод на сервер"
	each implementingClass 
		compileMethodAt: each selector
		inGSSession: GBSM currentSession
		failedMethods: nil].
При компиляции на сервере возможны ошибки. Хорошо бы увидеть все методы которые не прошли компиляцию.
failedMethods := OrderedCollection new.

filter := MethodCollector new protocol: 'server methods1'.
methodDefinitions := (MethodCollector new select: filter).
methodDefinitions do: 
	[:each | 
	each implementingClass 
		compileMethodAt: each selector
		inGSSession: GBSM currentSession
		failedMethods: failedMethods].

failedMethods isEmpty ifFalse: 
	["Открывается окно со списком методов 
	не прошедших компиляцию с указанием причин"
	GbxMethodListBrowser 
		openListBrowserOn: failedMethods
		label: 'Methods failing compilation'
		session: GBSM currentSession]
Выбирать методы для копирования на сервер можно по разному. Например я пользуюсь таким способом. В каждом методе который будет копироваться на сервер вызываю метод serverMethod. serverMethod ничего не делает – это просто метка которая говорит о том что метод будет копироваться на сервер. Тогда фильтр будет выглядеть так:
filter := MethodCollector new referencesTo: #serverMethod.

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

Также можно использовать другие фильтры и соединять фильтры с помощью And и Or. Более подробно рассказано в комментариях к классу MethodFilter.

Comments:
"serverMethod ничего не делает"Более кошерно использовать прагмы
 
С прагмами есть проблема. Ведь тэтот метод компилируется в GemStone где прагм нет. Во время копирования метода на сервер от прагм надо избавляться, что несколько усложняет задачу.
 
Множественная категоризация как в Dolphin-е здесь пригодилась бы.
 
Опять же тогда желательно иметь множественную категоризацию и на сервере(в GemStone).
 
Отправить комментарий

<< Home

Популярные статьи
:: Smalltalk?!
:: Почему Smalltalk?
:: Great Leap Forward from Java to Smalltalk

Последние сообщения
:: Big talk with the creator of Smalltalk
:: [ST] Unit-тестирование UI
:: Будущее для Tweak
:: [VW] Полезняшки: OSTimeZone
:: [ANN] www.seaside.st
:: [VW] Знаете ли Вы, что...
:: Croquet Road Map
:: [VW] Полезняшки: StackOverflow, ShiffmanTimeout
:: Объект nil
:: smalltalk@wikipedia

Архив
Предыдущие новости / Декабрь 2004 / Январь 2005 / Февраль 2005 / Март 2005 / Апрель 2005 / Май 2005 / Июнь 2005 / Июль 2005 / Август 2005 / Сентябрь 2005 / Октябрь 2005 / Ноябрь 2005 / Декабрь 2005 / Январь 2006 / Февраль 2006 / Март 2006 / Апрель 2006 / Май 2006 / Июнь 2006 / Июль 2006 / Сентябрь 2006 / Октябрь 2006 / Ноябрь 2006 / Декабрь 2006 / Январь 2007 / Февраль 2007 / Март 2007 / Апрель 2007 / Май 2007 / Июнь 2007 / Август 2007 / Сентябрь 2007 / Ноябрь 2007 / Январь 2008 / Март 2008 / Май 2008 / Июнь 2008 / Июль 2008 / Август 2008 / Сентябрь 2008

Atom Feed
Smalltalk по-русски


Powered by Blogger