Table of Contents
Johdanto: Ilmoitushaaste SaaSissa
Modernit SaaS-tuotteet luottavat oikea-aikaisiin, yksilöllisiin ilmoituksiin, jotka koskevat käyttäjien osallistumista, aseman säilyttämistä ja kriittisten järjestelmätapahtumien välittämistä. Käyttäjät odottavat saavansa hälytyksiä haluamiensa kanavien kautta. Sähköposti, tekstiviesti, työntöilmoitukset, sovellusviestit tai jopa webkoukkuja kolmannen osapuolen palveluihin. Kun tuote kehittyy, kanavien määrä kasvaa ja niiden hallinta hajanaisen ehdollisen logiikan kautta tulee huolto-onnettomuuden.
Directus, avoimen lähdekoodin päätön CMS ja backend alusta, tarjoaa joustavan perustan rakentaa SaaS sovelluksia. Sen datamalli, Virtaus moottori, ja extensible koukkuja tehdä ihanteellinen ympäristö toteuttaa vankka ilmoitusjärjestelmä. Soveltamalla klassinen luomissuunnittelu kuvio.Tehdas malli. Voit tiivistää kanavakohtainen luominen logiikka, decouple ydin liiketoiminnan koodi toimitustiedot, ja vaivattomasti lisätä uusia kanavia tuotteen kypsyessä.
Tehtaan kuvion ymmärtäminen
Tehdasmalli on luomismalli, joka tarjoaa käyttöliittymän kohteiden luomiseen super-luokassa, mutta sallii alaluokkien muuttaa luotavien kohteiden tyyppiä. Se edistää löysää kytkentää ja noudattaa Avointa/suljettua periaatetta[]: ohjelmistoyksiköiden pitäisi olla avoimia laajennuksia varten, mutta suljettuja muutoksille. Sen sijaan, että ne peukaloisivat hakemustasi :lla tai [ lausunnoilla, joiden perusteella päätetään, minkä ilmoituksen tarkoituksena on instantida, te siirrätte tämän vastuun omistettuun tehtaaseen.
Tämä kuvio loistaa, kun sinulla on perhe liittyvät esineet ja tarkka tyyppi instantia määritetään runtime perustuu dynaaminen tulo.Näin käyttäjä. Esimerkiksi ilmoitus asetukset tai tapahtuma käynnistyy. Ilmoituksen yhteydessä jokainen kanava on eri tuote, ... mutta ne kaikki jakavat yhteisen käyttöliittymän (esim., menetelmä).
Ilmoituskanavat SaaS-tuotteessa
Yhteisiä ilmoituskanavia ovat:
- Sähköposti[ . Transaktio- ja markkinointisähköpostit esimerkiksi SendGrid tai Mailgun.
- SMS ...............................................................................................................................................................................................................................................
- Puh ilmoitukset[ ... .........................................................................................................................................................................................................................................
- In-App-ilmoitukset . ... UI-paahtoleipää tai kojelautahälytyksiä.
- Verkkokirjat[ . HTTP POST-pyynnöt ulkoisiin päätetapahtumiin integraatioita varten.
- Likainen / epäsopu .
Ilman kaavaa koodisi voisi näyttää tältä:
function sendNotification(channel, message, recipient) {
if (channel === 'email') {
// Email logic here
} else if (channel === 'sms') {
// SMS logic here
} else if (channel === 'push') {
// Push logic here
} else {
throw new Error('Unknown channel');
}
}
Tämä lähestymistapa toimii muutamalle kanavalle, mutta jokainen uusi kanava pakottaa sinut muokkaamaan lähetystoimintoasi ja testaamaan uudelleen kaikki olemassa olevat logiikkasi. Tehdasmalli poistaa tämän haurauden.
Tehtaan mallin täytäntöönpano ilmoituksia varten
Alla kävelemme läpi TypeScript-sovelluksen, joka voidaan mukauttaa Directus-pohjaiseen SaaS-järjestelmään. TypeScript on luonnollinen Directukselle, koska alusta on rakennettu sen mukana ja tarjoaa rikkaan tyyppisen järjestelmän.
1. Määrittele ilmoitusrajapinta
interface Notification {
send(message: string, recipient: string): Promise<void>
}
2. Konkreettiset ilmoitusluokat
class EmailNotification implements Notification {
async send(message: string, recipient: string): Promise<void> {
// Use Directus’s internal mailer or an external SDK
console.log(`Sending email to ${recipient}: ${message}`);
}
}
class SMSNotification implements Notification {
async send(message: string, recipient: string): Promise<void> {
// Call Twilio API
console.log(`Sending SMS to ${recipient}: ${message}`);
}
}
class PushNotification implements Notification {
async send(message: string, recipient: string): Promise<void> {
// Use Firebase or OneSignal SDK
console.log(`Sending push to ${recipient}: ${message}`);
}
}
3. Ilmoitustehdas
type ChannelType = 'email' | 'sms' | 'push';
class NotificationFactory {
static createNotification(channel: ChannelType): Notification {
switch (channel) {
case 'email':
return new EmailNotification();
case 'sms':
return new SMSNotification();
case 'push':
return new PushNotification();
default:
throw new Error(`Unknown notification channel: ${channel}`);
}
}
}
4. Tehtaan käyttäminen hakemuksessasi
async function notifyUser(event: string, userId: string, channel: ChannelType) {
const notification = NotificationFactory.createNotification(channel);
await notification.send(event, userId);
}
Asiakaskoodin ei tarvitse koskaan tietää betonityyppiä. Se riippuu vain [ käyttöliittymästä. Tämä irrottaminen tekee yksikön testauksesta yksinkertaista. Voit pilkata ilmoitusobjektia koskematta tehdasta tai betoniluokkia.
Tehtaan piirroksen integrointi Directukseen
Directus tarjoaa useita maahantulopaikkoja ilmoitusten käynnistämiseksi:
- Flows[ ... .........................................................................................................................................................................................................................................
- ]Koukut [] [ tai koukkuja, jotka kulkevat CRUD-tapahtumissa.
- Custom Endpoints .
- Verkkokirjat .
Directus-projektissa voit asentaa ilmoitustehtaasi palveluna räätälöidyn moduulin tai laajennuksen sisään. Esimerkiksi Flow[]:n sisällä voit soittaa sisäisen API-päätetapahtuman, joka instantoi oikean kanavan käyttäjän tallennettujen asetusten perusteella. Vaihtoehtoisesti voit kääriä tehtaan [koukkuun], joka palaa uuden käyttäjän rekisteröitymisen jälkeen ja lähettää tervetuliaisviestin, tekstiviestivahvistuksen ja työntöilmoituksen mobiilisovellukseen.
Koska tehdas asuu yhdessä paikassa, voit päivittää sen karttoja koskematta jokaiseen koukkuun tai virtausta. Ja koska Directus Flows voi siirtää mielivaltaisia JSON-tietoja, voit helposti syöttää tehdasta kanavatunnisteilla tietokannastasi.
Tehtaan kuvion mukaisen lähestymistavan edut
Skaalattavuus
Uuden kanavan lisääminen tarkoittaa uuden luokan kirjoittamista, joka toteuttaa ja yhden rivin lisäämistä tehtaaseen. Asiakaskoodin muutoksia ei tarvita. Tämä on erityisen tärkeää moniportaisissa SaaS-tuotteissa, joissa eri vuokralaiset voivat ottaa käyttöön erilaisia kanavia.
Säilytettävyys
Ilmoitusten toimituslogiikka on erillään liiketoiminnan logiikasta. Jokainen betoniluokka voidaan ylläpitää itsenäisesti. Jos SMS-palveluntarjoaja muuttaa API:ään, muutat vain . Tehdas ja kaikki kuluttajat pysyvät muuttumattomina.
Testikelpoisuus
Voit testata jokaisen ilmoitusluokan erikseen ja voit pilkata []-rajapintaa, kun testaat korkeamman tason toimintoja. Tehdas voidaan itse tarkistaa yksinkertaisella testillä, joka tarkistaa, että se palauttaa kunkin kanavan oikean tyyppisiä tapauksia.
Joustavuus
Tehtaan voi laajentaa rakentamaan monimutkaisia kohteita. Esimerkiksi voit haluta siirtää konfiguraatio (API-avaimet, uudelleenkäyttökäytännöt) luomisaikaan. Voit ylikuormittaa tehdasmenetelmän tai käyttää Rakentaja[]-mallia tehtaan sisällä kootaksesi täysin konfiguroidut ilmoituskohteet. Directus.s ympäristömuuttujat tai tietokantaasetukset (esim. ] taulukko) ovat ihanteellisia lähteitä tällaiselle konfiguraatiolle.
Mahdolliset takaiskut ja huomiot
Vaikka tehtaan kuvio on tehokas työkalu, se ei ole hopea luoti:
- Yli-insinööri:[ Jos sinulla on vain kaksi kanavaa eikä suunnitelmia lisätä lisää, yksinkertainen ehto voisi olla hyvä. Kuvio tuo lisää tiedostoja ja abstraktioita.
- Päätöslogiikka on edelleen olemassa:[] Tehdas itse käyttää kytkinlausuntoa. Jos sinulla on kymmeniä kanavia, harkitse -rekisteröintikuviota[, jossa kanavat itse rekisteröivät tai jossa käytetään [-strategiaa[]], joka vaihtaa algoritmit esineiden sijaan. Molemmat voivat täydentää tehdasta.
- Vastuuruiskutus:[] Jos ilmoitusluokat riippuvat ulkoisista palveluista (esim. HTTP-asiakas tai kirjautuja), sinun on ruiskutettava nämä riippuvuussuhteet. Tehtaan on joko hyväksyttävä DI-säiliö tai saatava riippuvuudet parametreiksi .
Directus-laajennuksessa voit käyttää apuna alustaa, joka on sisäänrakennettu riippuvuusruisku ( toiminto ja palvelut) jakamalla tietoja, kuten kirjautumis- tai tietokantayhteys tehtaaseen.
Real-World Esimerkki: Monikanavailmoitukset B2B SaaS:ssä
Harkitse projektinhallintatyökalua, joka on rakennettu Directus-ohjelmalle. Kun tehtävä on annettu, järjestelmän on ilmoitettava:
- vastaanottaja sähköpostitse (jos he haluavat, että)
- vastaanottajan käyttämän paahtoleivän kautta
- Slack-projektikanava
Tehtaan avulla koodista Directus tulee:
import { NotificationFactory } from './services/NotificationFactory';
async function onTaskCreate(payload, { accountability }) {
const { assigneeId } = payload;
const userPreferences = await getUserNotificationPreferences(assigneeId);
for (const channel of userPreferences.channels) {
const notifier = NotificationFactory.createNotification(channel);
await notifier.send(`You have a new task!`, assigneeId);
}
}
Jokainen ilmoitusluokka käsittelee omaa idioottimaista toimitustaan. Tehdas on edelleen yksi totuuden lähde kanavan kartoitukseen.
Jotta tällainen järjestelmä toteutuisi täydellisesti, ks. [Dirktus.Dirktus.Saattaa olla kiinnostunut myös siitä, miten muut alustat käsittelevät ilmoitusjärjestelmää. Jotta tehdasmallista saataisiin syvempi käsitys, []Refactoring Guru-sivulla tehdasmenetelmässä[ on erinomainen resurssi. Saatat olla kiinnostunut myös siitä, miten muut alustat käsittelevät ilmoitusjärjestelmää.
Päätelmät
Tehdasmalli tarjoaa puhtaan, ylläpidettävissä olevan tavan hallita SaaS-tuotteen useita ilmoituskanavia. Kapselilla objektin luominen, decouple your core application logiikka toimitusspesifikoista, jolloin se on helppo lisätä, poistaa tai muokata kanavia ilman värähtelyvaikutuksia koko koodipohjan. Kun yhdistetään Directus... joustavat koukkuja ja Flows, saat ilmoituksen arkkitehtuurin, joka skaalaa tuotteen kasvua.
Olitpa rakentamassa yksinkertaista sähköpostin ilmoittaja tai monimutkainen monikanavainen moottori, alkaen tehtaan kuvion varhaisessa vaiheessa kannattaa, kun ominaisuus asettaa laajenee. Investointi pieneen määrään abstraktio tänään säästää päiviä refaktorointi huomenna.