Kopīgot, izmantojot


Fasāde, secība un aktivitātes nodokļu integrācijā

Pakalpojumu izmantošana kontrolē nodokļu integrācijas plūsmu, izmantojot secību, kas uztur aktivitāšu sarakstu. Šis raksts iepazīstina šīs trīs klases nodokļu integrācijā.

Pamatlīdzekļu darbības

public final static class TaxIntegrationFacade

Feaade (TaxIntegrationFacade) ir papildu nodokļu integrācijas interfeiss. Tas ir tilts uz nodokļu aprēķinu pakalpojumu.

Šajā piemērā parādīta svarīgākā metode.

[Replaceable]
public static void calculate(TaxIntegrationDocumentObject _document)

Šī metode pieņem dokumentu (TaxIntegrationDocumentObject) kā ievadi un atgriež to void.

Metode modificē dokumentu tieši. Dokuments darbojas arī kā rezultāts.

Piezīme

Metode ir nomaināma. Citiem vārdiem sakot, to var pilnībā nomainīt (pielāgots).

TaxIntegrationSequence sequence = TaxIntegrationSequence::construct(LoggerName)
    .appendActivityOnDocument(TaxIntegrationSettingRetrievalActivityOnDocument::construct())
    .appendActivityOnDocument(TaxIntegrationDataRetrievalActivityOnDocument::construct())
    .appendActivityOnDocument(TaxIntegrationCalculationActivityOnDocument::construct())
    // ...
    .appendActivityOnDocument(TaxIntegrationDataPersistenceActivityOnDocument::construct());
sequence.act(_document);
if (!_document.isOK())
{
    throw _document.getException();
}

Metodē tiek veidota un izsaukta secība (TaxIntegrationSequence). Visas aktivitātes tiek pievienotas secībai pēc kārtas.

Kā pieprasīts, izņēmums ir skaidri uzmests beigās.

Sērija

Secība (TaxIntegrationSquence) ir īpaša aktivitāte, kas uztur aktivitāšu secību. Izsaucot act tās metodi, visas aktivitātes tiek palaistas tādā secībā, kā tās tiek pievienotas.

public final class TaxIntegrationSequence
    extends TaxIntegrationAbstractActivity
{
    public final void act(TaxIntegrationDocumentObject _document);
    private void actInternal(TaxIntegrationDocumentObject _document);
}

Secības izmantošanai ir jāveic šādas darbībasTaxIntegrationSequence:

  1. Metode construct izveido secību.
  2. Secība appendActivitySequence tiek appendActivityOnDocument veidota appendActivityOnLine , izmantojot metodes.
  3. Metode act ir secība.

Iekšēji secība uztur aktivitāšu sarakstu (List). Pēc tam tas tiek uzskaitīts piesaukšanas () sarakstāact.

  • Secība izsauc aktivitātes shouldSkip metodi, lai noteiktu, vai šī dokumenta aktivitāte ir jāizlaiž.

  • TaxIntegrationSequence Un TaxIntegrationAbstractActivityOnDocument, ja aktivitāte nav jāizlaiž, metode tiek izsaukta act tieši.

  • Secībai TaxIntegrationAbstractActivityOnLine tiek uzskaitīti visi dokumenta TaxIntegrationLineObject objekti un izsaukta tā act metode. Maksas tiek ieviestas arī objektā TaxIntegrationLine . Metode act vispirms tiek izsaukta no dokumenta maksām. Pēc tam tas tiek izsaukts dokumenta rindās kopā ar maksu katrā rindā. Piemēram, dokumentā ir divas maksas un divas rindas. Vienlaicīgi katrai rindai ir divas maksas. Šajā gadījumā pilnīga secība būs šāda:

    1. Pirmā dokumenta maksa
    2. Dokumenta otrā maksa
    3. Dokumenta pirmā rinda
    4. Pirmās rindas maksa
    5. Pirmās rindas otrā maksa
    6. Dokumenta otrā rinda
    7. Otrās rindas pirmā maksa
    8. Otrās rindas maksa

TaxIntegrationSequence ir paredzēts izmantošanai tieši un tiek ieviesta kā konkrēta klase, kam ir publiska act metode.

Tālākajos piemēros ir parādīta actInternal ātrās atsauces metode.

private void actInternal(TaxIntegrationDocumentObject _document)
{
    var enumerator = list.getEnumerator();
    while (enumerator.moveNext())
    {
        anytype current = enumerator.current();
        if (current is TaxIntegrationSequence)
        {
            TaxIntegrationSequence sequence = current;
            sequence.act(_document);
            continue;
        }
        if (current is TaxIntegrationAbstractActivityOnDocument)
        {
            TaxIntegrationAbstractActivityOnDocument activity = current;
            if (!activity.shouldSkip(_document))
            {
                activity.act(_document);
            }
            continue;
        }
        if (current is TaxIntegrationAbstractActivityOnLine)
        {
            TaxIntegrationAbstractActivityOnLine activity = current;
            if (!activity.shouldSkip(_document))
            {
                SetEnumerator chargeEnumerator = _document.getChargeSet().getEnumerator();
                while (chargeEnumerator.moveNext())
                {
                    TaxIntegrationLineObject charge = chargeEnumerator.current();
                    activity.act(charge);
                }
                SetEnumerator lineEnumerator = _document.getLineSet().getEnumerator();
                while (lineEnumerator.moveNext())
                {
                    TaxIntegrationLineObject line = lineEnumerator.current();
                    activity.act(line);
                    chargeEnumerator = line.getChargeSet().getEnumerator();
                    while (chargeEnumerator.moveNext())
                    {
                        TaxIntegrationLineObject charge = chargeEnumerator.current();
                        activity.act(charge);
                    }
                }
            }
            continue;
        }
    }
}

Aktivitāte

Aktivitāte veic reālu darbu integrācijas plūsmā. Tas darbojas kā segments integrācijas plūsmā. Aktivitātes nosaukums apraksta tās nolūku.

Visas aktivitātes ir pārmantotas no vienas klases TaxIntegrationAbstractActivity. Ir trīs aktivitāšu tipi:

  • TaxIntegrationSequence
  • TaxIntegrationAbstractActivityOnDocument
  • TaxIntegrationAbstractActivityOnLine

Katrs darbības tips satur metodi un act metodi, bet actInternal tie pieņem dažādus argumentus. TaxIntegrationAbstractActivityOnDocument un TaxIntegrationAbstractActivityOnLine paredzēts paplašināt. Tās ir ieviestas kā abstraktās klases, kurām ir iekšējā act metode un abstrakta actInternal metode. Tāpēc jaunajai aktivitātei jāpaplašina viena no šīm divām abstraktām klasēm. Aktivitātei jāievieš sava actInternal metode, lai aizturētu aktivitātes īsto loģiku. Ja aktivitāte nav piemērojama visām darbībām/dokumentiem, tai jāievieš sava shouldSkip metode. TaxIntegrationSequence paredzēts tiešai izmantošanai. Tas ir ieviests kā konkrēta klase, kam ir publiska act metode.

Visi trīs aktivitāšu notikumu tipi reģistrē notikumus metodes act laikā, kā nepieciešams pēc TaxIntegrationLogLevelUtility pārbaudes. Reģistrēšanas konteksts ir pārmantots TaxIntegrationAbstractActivity. Šajā ilustrācijā parādīta aktivitāšu hierarhija.

Aktivitātes hierarhija

Papildinformāciju par to, kā pievienot jaunu aktivitāti, skatiet sadaļā Jaunas aktivitātes pievienošana nodokļu integrācijai.

Sērija

TaxIntegrationSequence ir īpaša aktivitāte.

Dokumentu aktivitāte

Dokumentu aktivitāte darbojas tālāk TaxIntegrationDocumentObject un paplašinās TaxIntegrationAbstractActivityOnDocument.

public abstract class TaxIntegrationAbstractActivityOnDocument
    extends TaxIntegrationAbstractActivity
{
    internal final void act(TaxIntegrationDocumentObject _document);
    protected abstract void actInternal(TaxIntegrationDocumentObject _document);
}

Jaunai dokumentu aktivitātei jāievieš actInternal metode, lai būtu šīs aktivitātes loģika. Metode actInternal pieņem objektu kā TaxIntegrationDocumentObject ievadi. Tāpēc atšķirībā no rindas aktivitātes tā var manipulēt ar datiem dokumentu līmenī. Tomēr dokumenta darbība var darboties, TaxIntegrationLineObject arī uzkrājot TaxIntegrationDocumentObject objektu. Lielākā daļa dokumentu darbību apstrādā datus gan dokumentu līmenī, gan rindu līmenī. Ja aktivitāte nav piemērojama visām darbībām un dokumentiem, tai jāievieš sava shouldSkip metode.

Rindas aktivitāte

Rindas aktivitāte darbojas arī tālāk TaxIntegrationLineObject un pagarinās TaxIntegrationAbstractActivityOnLine.

public abstract class TaxIntegrationAbstractActivityOnLine
    extends TaxIntegrationAbstractActivity
{
    internal final void act(TaxIntegrationLineObject _line);
    protected abstract void actInternal(TaxIntegrationLineObject _line);
}

Jaunās rindas aktivitātei jāievieš actInternal metode, lai aizturētu šīs aktivitātes loģiku. Metode actInternal pieņem objektu kā TaxIntegrationLineObject ievadi un var manipulēt tikai ar datiem no konkrētā rindas objekta. Tomēr, tā kā maksas ir aprakstītas arī kā TaxIntegrationLineObject objekts, maksas arī tiks apstrādātas ar rindas aktivitāti. Ja aktivitāte nav piemērojama visām dokumenta rindām , tai jāievieš sava shouldSkip metode. Metode shouldSkip norāda, vai pašreizējā aktivitāte ir jāizlaiž visām dokumenta rindām (iekļaujot maksas), jo tā pieņem objektu kā TaxIntegrationDocumentObject ievadi.

Pašreizējās aktivitātes

Šeit ir pašreizējo aktivitāšu saraksts šādā secībā TaxIntegrationFacade::calculate:

  1. TaxIntegrationSettingRetrievalActivityOnDocument
  2. TaxIntegrationDataRetrievalActivityOnDocument
  3. TaxIntegrationCalculationActivityOnDocument
  4. TaxIntegrationErrorHandlingActivityOnDocument
  5. TaxIntegrationTaxCodeCheckActivityOnLine
  6. TaxIntegrationTaxIdActivityOnDocument
  7. TaxIntegrationListCodeActivityOnDocument
  8. TaxIntegrationCurrencyExchangeActivityOnDocument
  9. TaxIntegrationDataPersistenceActivityOnDocument