| Laajenna kaikki | Sulje kaikki |
| Dokumentin nimi: | 7. Rakenteellinen ja tekninen analyysi |
| Dokumentin tekijät | Juha Lähteenmäki |
| Dokumentin jakelu: | Juha Lähteenmäki |
| Dokumentin jakelun rajoitukset | Ei rajoituksia |
| Viimeksi muokattu: | 20.08.2003 |
| Dokumentin versiotiedot: (esim. Työversio (beta 1.0),Versiosykli nro 1) | versio 1.0, versiosykli 2 (valmistumis pvm: 16.07.03) SP1 20.08.03 |
| Dokumentin kattavuus: | Kattaa järjestelmän/komponentin rakenteen kuvauksen lähtien ylimmältä pakettitasolta ja päätyen luokkatasolle. Luokista ja moduuleista kuvataan lisäksi rajapinta |
| Dokumentointi malli: | STEP beta 1, työversio, SoftaSpec Versio 1.0 beta 3 |
| Liittyy osana dokumenttiin: | HtmlEditCtrl SoftaSpec |
| Osan pakollisuus: | Pakollinen kaikissa järjestelmissä/komponenteissa. |
| Dokumentin muutoksia: (ekan version valmistumisen jälkeen) | (15.3.2003, Juha)
(3.6.2003, Juha)
(18.6.2003, Juha)
(16.7.03, Juha)
|
HtmlEditCtrl totetutetaan .NET:n käyttöliittymäkontrollina eli Web-kontrollina (periytetty .NET:n WebControl- luokasta) ASP.NET -ympäristöön. Sen tehtävänä on mahdollistaa Html:n perusmuotoilujen käyttö syötettäessä tekstiä Web-sivulla. Tekstin editointi tehdään selainpäässä JavaScriptin avulla hyödyntämällä dynaamiseen html:ään kuuluvan DIV/SPAN-elementin ContentEditable ominaisuutta. Myös tekstin muotoilu tehdään selainpäässä. Kontrolliin liittyvät tekstiä muotoilevat ToolBar:n nappulat eivät tästä johtuen yleensä generoi Post eventtiä vaan hoitavat muotoilun selainpäässä JavaScriptin avulla. Koska dynaamisen html:n ja JavaScriptin toiminnassa on eroja eri selainten välillä selaimeksi rajataan selaimeksi IE5.5 tai uudempi toteutuksen helpottamiseksi.
Serveripään osalle jää lähinnä komponentin renderöinti html:nä, tarvittavan JavaScriptin tuottaminen ja postatun html:n vastaanottaminen. Ideana on että teksti lähetetään html-koodatussa muodossa palvelimelle Post eventin sattuessa. Tämä tapahtuu mm. silloin kun kontrolliin liittyvää Save-nappulaa painetaan tai jos sivulla olevan formin tiedot esim. ulkopuolisen nappulan painalluksesta lähetään palvelimelle. Tekstiä voidaan kuljettaa erillisessä Hidden-kentässä, johon se ensin aina ennen post:ia tallennetaan ja josta se vastaavasti taas postin jälkeen luetaan.
Kontrollin kaikki palvelinpään osat toteutetaan .NET:iin kuuluvalla C# -kielellä. C# tarjoaa monipuolisen ja modernin työkalun joka soveltuu mainiosti ASP.NET sovellusten rakentamiseen Microsoft:n tarjoamille Web-palvelin alustoille (IIS).
HtmlEditTbox-kontrollin rakenne on periaatteessa yksinkertainen. Kontrollin pienestä koosta johtuen mitään pakettirakennetta ei ole vaan ensimmäinen HUSA:n mukainen ILE-taso on luokkataso. Samasta syystä kerrosjako (käyttöliittymään ja käyttöliittymälogiikkaan) suoritetaan luokkien sisäisesti, siis alimmalla mahdollisella HUSA:n sallimalla ILE-tasolla. Käytännössä kerrosjako toteutuu mahdollistamalla monipuolinen tyylin muokkaus kontrollin rajapinnan kautta sekä erottelemalla kussakin luokassa kontrollin luomiseen liittyvät metodit (käyttöliittymä), alustukseen liittyvät metodit (käyttöliittymälogiikka) ja tarvittavien JavaScriptien luomismetodit (käyttöliittymälogiikka) omien koodialueidensa alle (C#:n region)
Nimiavaruudet ovat:

Nimeämisperiaatteet ovat seuraavat:
Luokkatasolla (HUSA:n karkein (ylin) ILE-taso tässä komponentissa) luokkien nimet alkavat isolla ja kontrollispesifiset (ulospäin näkyvät --> public) luokat lisäksi sanalla "HtmlEditTbox" ja mahdolliset rajapinnat saavat eteensä lisäksi I-etuliitteen sekä enumit E -etuliitteen. Edellä mainittu on välttämätöntä sekaannusten välttämiseksi koska edellä mainitusta nimiavaruudesta (yleisesti omille kontrolleilleni käyttämä nimiavaruus) saattaa olla eri projekteissa käytössä muitakin kontrolleja tai niihin liittyviä luokkia.
Metodi ja property tasolla (alin ILE-taso) ei sinänsä käytetä mitään laajempaa nimeämisohjeistoa. Public metodien/propertyjen nimet alkavat kuitenkin isolla. Kontrollin rajapinta on jaettu kahteen erilliseen alarajapintaan (Toolbar ja EditTextbox) joiden alta löytyvät pelkästään ko. osaan liittyvät propertyt/metodit.
Jäsenmuuttujat alkavat etuliitteellä my, TextBox = Tbox ja Button = Btn, DdList = DropDownList. Julkisten propertyjen nimet rakennetaan seuraavasti: Ensin mahdollinen kontrollin lyhenne/nimi ja lopuksi ominaisuuden täsmentävä osa Esim BtnBoldToolTip
- (pakettirakennetta ei ole kuvattu koska kontrollin pienuudesta johtuen ensimmäinen ILE-taso on luokkataso.)
Normaalin WebControl:n tapaan kontrollin ytimen muodostaa yksi luokka; HtmlEditTbox joka vastaa kontrollin ns. aliluokkien (HtmlEditTboxToolBar ja HtmlEditTboxTextbox) yhdistelystä kontrollin vaatimaksi kokonaisuudeksi ja tämän kokonaisuuden koordinoinnista. Aliluokilla tarkoitetaan tässä yhteydessä HtmlEditTbox:iin tiukassa koostesuhteessa (Composite aggregate) olevia luokkia jotka muodostavat tietyn osan isäntäkontrollista. Irrallisina ko. luokista luoduilla olioilla ei koostesuhteen mukaisesti ole merkitystä mutta yhdessä ne isäntäluokan kanssa muodostavat kontrollista toimivan ja järkevän kokonaisuuden. Kumpikin aliluokka puolestaan vastaa oman osansa ominaisuuksista, alustamisesta ja renderöitymisestä. Aliluokille annetaan rakentajan kautta viite HtmlEditTbox:n kontrolli-kokoelmaan tai pääkehyksen (taulun) soluun johon ne lisäävät itsensä. Vastaavasti aliluokat osaavat alustaa ominaisuutensa renderöinnin kannalta sopiviin arvoihin silloin, kun koordinointia hoitava HtmlEditTbox-olio näkee sen tarpeelliseksi. Tiukan riippuvuussuhteensa takia aliluokkien alustaminen ja aliluokkaolioiden luominen on rajattu pelkästään HtmlEditTbox:n käyttöön joten niiden rakentajan näkyvyysalue on kontrollin sisään rajoittuva Internal.
JavaScriptin ja Html:n generoinnissa voidaan käyttää erinäistä määrää apuluokkia mutta niihin ei ole tässä arkkitehtuurisuunnittelussa otettu kantaa. Samoin toteutustekniikkaan liittyen tarvitaan tietynlaiset luokkansa kuten eventtien välittämiseen liittyvät delegaatti/argumenttiluokat sekä suunnittelutilan renderöinnistä vastaava designer luokka. Ne on designerluokkaa lukuun ottamatta jätetty pois kuvasta, koska niiden voidaan katsoa liittyvän tiukasti .NET toteutustekniikkaan.

Kuva 7.2 Komponentin luokkarakenne ja yhteydet muihin komponentteihin. Riippuvuuksia ei .NET:n vakiokirjastojen ulkopuolelle ole.
Riippuvuus kohtaan on luokkakuvauksissa merkitty ainoastaan sellaiset suorat riippuvuudet jotka ovat .NET:n ulkopuolisiin luokkiin
Luokkakuvauksiin on merkitty näkyviin vain sellaiset kantaluokan/rajapintojen metodit, propertyt tai eventit joiden totetusta ko. periytetty luokka muuttaa. Näissä tapauksissa taulukossa selityksen perässä on suluissa (inherited from kantaluokan nimi). Linkit kantaluokkien/rajapintojen kuvauksiin ovat ennen varsinaista luokkakuvausta. Kantaluokista on merkitty ainoastaan se josta ko. luokka suoraan periytyy. Samoin rajapinnoista ne jotka ko. luokka suoraan toteuttaa, ei siis kantaluokkien toteuttamia rajapintoja.
Näkyviin ei ole merkitty private-tason metodeja, jäsenmuuttujia tai propertyjä. Näkyviin ei myöskään ole merkitty sellaisia protected/internal tason metodeja jotka eivät ole ulkoisen käytön ja toiminnallisuuden/arkkitehtuurin ymmärtämisen kannalta olennaisia. Tällaiset osat listataan vasta toteutuksen yhteydessä luotavissa CodeCommentReport:eissa.
Kaikille HtmlEditTbox-kontrollin osille ovat yhteisiä seuraavat properyt ja metodit. Yhteistä rajapintaa ei kuitenkaan ole merkitty suunnitelmaan koska ko. luokkia ei todennäköisesti missään vaiheessa tarvitse käyttää yhteisen rajapinnan läpi. Näin rajapinnan tekeminen olisi turhaa työtä. Se voidaan kuitenkin toteutusvaiheessa tehdä mikäli se nähdään keinona varmistaa suunnitelmanmukaisuus.
Metodien parametrit jätetään kuvauksissa vielä avoimiksi. Suuntaa antavia metodien parametrilistoja voidaan luokkakuvauksiin merkitä mutta tarkat parametrilistat liitetään vasta CodeCommentReporteihin.
Kaikkia propertyjä koskevat tiedot: Virhekäsittely = Jos viewstatea ei alustettu palauttaa oletuksen
Kaikkia tooltip-propertyjä koskevat lisäksi seuraavat tiedot: Oletusarvo = "", kuvaus = vastaavan kontrollin tooltip. Näitä ei ole itsestäänselvyyksinä listattu taulukkoon.
Kaikkia skriptien kysely metodeja ts Get...Scripts(...) koskevat seuraavat säännöt. Skriptit palautetaan ilman skripti tageja (ne on siis muualla lisättävä ennen kuin skripti lisätään sivulle). Tämän ansiosta samaan skriptiblokkiin voidaan lisätä muitakin osia. Metodi palauttaa tyhjän stringin mikäli ko. tyypin skriptiä ei tarvita. Jos metodi on muotoa: GetCommon...Script(...) on kyseessä ns. yhteiskäyttöinen skripti ts. tätä skriptiä ei tarvitse lisätä jokaista kontrollia kohden erikseen vaan riittää kun sivulla on yksi kappale. Vastaavasti jokaista kontrollia varten erikseen lisättävät skriptit ovat muotoa GetCtrlSpecific...Script(...).
| Erityistehtävä tässä projektissa: |
(sama kuin yleistehtävä) Vastaa HtmlEditTbox:n Toolbar:n lisäämisestä, alustamisesta, ominaisuuksien tallettamisesta ViewStateen (välitetään viite HtmlEditTbox:n ViewStateen) ja pelkästään ToolBar:n tarvitsemista scripteistä.
|
| Luokka/moduuli kuuluu kerrokseen/kerroksiin: | Käyttöliittymä ja käyttöliittymälogiikka (erotettu C#:n regionien avulla) |
| Muuta projektikohtaista huomioitavaa:
|
Luokka on suunnattu pelkästään tämän projektin käyttöön (HtmlEditTbox) ja sen rakentajan näkyvyys ulospäin on rajoitettu (internal) |
Avaa uudessa ikkunassa
| Erityistehtävä tässä projektissa: | (sama kuin yleistehtävä) Vastaa HtmlEditTbox:n EditTextBox:n lisäämisestä, alustamisesta, ominaisuuksien tallettamisesta ViewStateen (välitetään viite HtmlEditTbox:n ViewStateen) ja EditTextBox:n liittyvistä scripteistä --> vastaa suurimmasta osasta tärkeimpiä toiminnallisia skriptejä.
|
| Luokka/moduuli kuuluu kerrokseen/kerroksiin: | Käyttöliittymä ja käyttöliittymälogiikka (erotettu C#:n regionien avulla) |
| Muuta projektikohtaista huomioitavaa:
|
Luokka on suunnattu pelkästään tämän projektin käyttöön (HtmlEditTbox) ja sen rakentajan näkyvyys ulospäin on rajoitettu (internal) |
Avaa uudessa ikkunassa
| Erityistehtävä tässä projektissa: | Kontrollin pääluokka ja ulospäin näkyvä rajapintaluokka. Päävastuualueena on kontrollin toiminnan ja rakentamisen koordinointi, osien yhdistäminen ja rajapinnan tarjoaminen
|
| Luokka/moduuli kuuluu kerrokseen/kerroksiin: | Käyttöliittymä ja käyttöliittymälogiikka (erotettu C#:n regionien avulla) |
| Muuta projektikohtaista huomioitavaa:
|
- |
Avaa uudessa ikkunassa
| Erityistehtävä tässä projektissa: | .NET:n WebControllien toteutustekniikkaan liittyvä luokka jonka avulla kontrolli renderöidään suunnittelutilassa käyttäen hyväksi aliluokkien (HtmlEditTboxTextbox ja HtmlEditTboxToolbar) GetDesignTimeHtml() metodeita. |
| Luokka/moduuli kuuluu kerrokseen/kerroksiin: | Käyttöliittymä |
| Muuta projektikohtaista huomioitavaa:
|
- |
Avaa uudessa ikkunassa
| Erityistehtävä tässä projektissa: | Eventtiargumentti luokka jota käytetään save-eventin yhteydessä tarvittavien tietojen välittämiseen (ei näy kuvassa). Sijaitsee HtmlEditTbox:n alla eli nimiavaruus Web.UI.WebControls.HtmlEditTbox |
| Luokka/moduuli kuuluu kerrokseen/kerroksiin: | Käyttöliittymälogiikka |
| Muuta projektikohtaista huomioitavaa:
|
- |
Avaa uudessa ikkunassa