Есть такая проблема дизайна.
Предположим, у вас есть набор классов, реализующих похожие методы, но не идентичные.
Пример: ClassA имеет такие методы.
void Add(string str);
void Delete(string str);
List GetInfo(string name);
Другой класс, ClassB, имеет следующие методы.
void Add(Dictionary Info);
void Delete(string str);
Dictionary GetInfo(string name);
Итак, природа методы аналогичны, но типы возвращаемых данных / входные параметры отличаются. Если я разработаю интерфейс для сохранения согласованности, я могу определить только операцию удаления там. В качестве альтернативы я могу думать о наборе независимых классов без каких-либо отношений друг с другом (конечно, без реализаций интерфейса), но я не думаю, что это хороший дизайн.
- Какой подход я могу использовать для реализации этого?
- Я новичок в общих интерфейсах. Помогает ли это в этом случае? Если так, я собираюсь изучить и внедрить их. { общедоступные: CGarage (); ~ CGarage (); typedef std :: vector
CarCollection; ... В своей повседневной работе я часто пишу классы, как в этом упрощенном примере:
class CGarage { public: CGarage(); ~CGarage(); typedef std::vector
CarCollection; private: CarCollection m_Cars; }; Я хочу, чтобы пользователи CGarage могли только читать доступ к коллекции CarCollection. Для достижения этой цели есть несколько общих решений, которые все не очень удовлетворительны:
Решение 1
class CGarage { Car GetCar(CarCollection::size_type index) const; CarCollection::size_type CarCount() const; };
Главный недостаток:
- Из-за отсутствия итераторов я не могу использовать алгоритмы STL в автомобилях (например, for_each (. ..))
Решение 2
class CGarage { CarCollection::const_iterator CarBegin() const; CarCollection::const_iterator CarEnd() const; CarCollection::size_type CarCount() const; };
Главный недостаток: apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk/ Что я проверял с помощью стандартного git svn clone https: // svn ....
Я пытаюсь использовать git-svn со следующим проектом:
https://svn.apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk/
Который я проверял с использованием стандартного
git svn clone https://svn.apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk/ -T trunk -b branch -t tags
invocation .У меня начались проблемы с использованием git-svn dcommit с git-svn после ветвления с помощью
git checkout -b
, а неgit svn branch
, а затем слияния этой локальной ветки с master и пытается зафиксировать. Как ни странно, даже после выполнения чистой проверки у меня все еще возникают ошибки, когда я пытаюсь выполнить dcommit.Следующий довольно длинный след представляет мой текущий рабочий процесс с git-svn:
jacob@jacob-laptop:~/workspace/gsoc2010/scxml-js$ git svn dcommit Committing to https://jbeard@svn.apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk ... M build-common.xml M src/xslt/backends/js/StateTableStatechartGenerator.xsl M src/xslt/backends/js/SwitchyardStatechartGenerator.xsl M src/xslt/ir-compiler/appendTransitionInformation.xsl M src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl M src/xslt/ir-compiler/flattenTransitions.xsl M src/xslt/ir-compiler/nameTransitions.xsl M src/xslt/ir-compiler/numberStatesAndTransitions.xsl M src/xslt/ir-compiler/splitTransitionTargets.xsl M src/xslt/util/language-frontend-module-generators/sh-from-topo-sort-list-generator.xsl M src/xslt/util/topo-sort.xsl Committed r1037491 W: 502073c202cb1fbe089f0e8b7100304f0aa74729 and refs/remotes/trunk differ, using rebase: :100644 100644 7930fd690be01a5716490704b5556e2b5cab5ba6 51047f2c8cf1daaa94ae44433a9aa2acc222ae43 M build-common.xml :040000 040000 59251941b33bda1376881b33bb2263ea87b1b947 2f5e2586e26bc7d05def065cfcf05327982b81d7 M src Current branch master is up to date. # of revisions changed before: 39c6f7e2d7b82cc782b8770d1ddb0ecb4f86e780 c5f360feb3a6bdaab2fb2f48d05e8691824e3231 after: 502073c202cb1fbe089f0e8b7100304f0aa74729 39c6f7e2d7b82cc782b8770d1ddb0ecb4f86e780 c5f360feb3a6bdaab2fb2f48d05e8691824e3231 If you are attempting to commit merges, try running: git rebase --interactive --preserve-merges refs/remotes/trunk Before dcommitting jacob@jacob-laptop:~/workspace/gsoc2010/scxml-js$ git svn rebase M build-common.xml M src/xslt/ir-compiler/nameTransitions.xsl M src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl M src/xslt/ir-compiler/appendTransitionInformation.xsl M src/xslt/ir-compiler/flattenTransitions.xsl M src/xslt/ir-compiler/numberStatesAndTransitions.xsl M src/xslt/ir-compiler/splitTransitionTargets.xsl M src/xslt/backends/js/SwitchyardStatechartGenerator.xsl M src/xslt/backends/js/StateTableStatechartGenerator.xsl M src/xslt/util/language-frontend-module-generators/sh-from-topo-sort-list-generator.xsl M src/xslt/util/topo-sort.xsl r1037491 = e8d820cfdca882a57fbfa003b9673313be6c9621 (refs/remotes/trunk) First, rewinding head to replay your work on top of it... Applying: Changed some paths around so python fronend works. Applying: Removed test_with_xsltproc.sh. This file no longer needed, as we now generate a bash backend module. jacob@jacob-laptop:~/workspace/gsoc2010/scxml-js$ git svn dcommit Committing to https://jbeard@svn.apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk ... M src/python/scxml/cgf/backends/js M src/python/scxml/cgf/xslt Committed r1037493 W: 8563b885bfca77ccb33a87f56f78e6323af022a9 and refs/remotes/trunk differ, using rebase: :040000 040000 c33b3d66ecc6735af3241d7f9cee383d2736f614 59251941b33bda1376881b33bb2263ea87b1b947 M src Current branch master is up to date. # of revisions changed before: 574e2e495fa12cf3d81004638a06e3315d0abba5 after: 8563b885bfca77ccb33a87f56f78e6323af022a9 574e2e495fa12cf3d81004638a06e3315d0abba5 If you are attempting to commit merges, try running: git rebase --interactive --preserve-merges refs/remotes/trunk Before dcommitting
Мне в основном нужно выполнить
git svn dcommit
, а затемgit svn rebase
для каждый коммит с момента последнего dcommit. Обычно это работает чисто, но иногда дает сбой и требует больше ручной работы.Что может быть причиной этой проблемы с dcommit, так что даже использование чистой проверки не решает ее?