Какой лучший дизайн я могу использовать для определения методов с тем же именем?

Есть такая проблема дизайна.

Предположим, у вас есть набор классов, реализующих похожие методы, но не идентичные.

Пример: 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);

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

  1. Какой подход я могу использовать для реализации этого?
  2. Я новичок в общих интерфейсах. Помогает ли это в этом случае? Если так, я собираюсь изучить и внедрить их. { общедоступные: 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, так что даже использование чистой проверки не решает ее?

7
задан The Pixel Developer 21 November 2010 в 16:29
поделиться