[OOP] geschikt class model

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Infrastructure Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 12945 Introductie Our client is one of the most innovative companies within the Netherlands. Currently we are looking for an Infrastructure Platform Engineer. Within this role you will be developing the infrastructure. Functieomschrijving Within this role you are responsible in the development of our distributed data and compute platform infrastructure. You will design, develop and implement new features and fixes. Next to this you will integrate and configurate other packages that supports the development of tuning applications within the organisation. You will support customer sites remotely. Design and implement the

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Senior .NET Ontwikkelaar

In het kort Als Senior .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag met complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek (denk aan ECT) en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan

Bekijk vacature »

Integratie expert - Java Developer

Dit ga je doen Nieuw koppelingen ontwerpen, ontwikkelen en implementeren; Je schakelt met de klanten om hen zo goed mogelijk van dienst te zijn. Strategisch kijken naar nieuwe mogelijkheden op bestaande of nieuwe koppelingen zo effectief mogelijk te realiseren; Je bestaande toolset afwegen tegen nieuwe mogelijkheden om integratiedoelen steeds effectiever en/of effcienter te bewerkstelligen; Bestaande software koppelingen beheren, dit zijn koppelingen met zowel interne als externe systemen; Overleg met zowel directe collega's als met stakeholders om nieuwe integratieplannen concreet te maken; Je kunt de junioren meenemen op sleeptouw. Hier ga je werken Onze klant is op zoek naar een ervaren

Bekijk vacature »

Full stack developer Node.js

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »

Junior Java Developer

Dit ga je doen Full stack web- en appdevelopment; Vertalen van de functionele wensen naar de technische specificaties; Sturing geven aan/klank board zijn voor de software teams; Trainen van de software teams; Sparren met klanten; Meedenken over architectuur. Hier ga je werken De organisatie is een bureau welke websites en mobiele applicaties bouwt voor verschillende toonaangevende organisaties. Hierbij richten zij zich voornamelijk op de sectoren leisure, overheid en zorg. De sfeer intern kenmerkt zich door informaliteit, gezelligheid en ambitie. Ze werken dag in dag uit samen om mooie producten op te leveren voor hun klanten. Op dit moment zijn er

Bekijk vacature »

T-SQL Database developer

Functie omschrijving Ben jij een ETL database specialist? Houd jij ervan om te puzzelen met Databases, Query's & Stored procedures? Zoek jij uitdaging, vrijheid en verantwoordelijkheid? Zoek dan niet verder! Wij zijn per direct op zoek naar medior en senior database developers. Je gaat werken voor een relatief klein softwarebedrijf in omgeving Tilburg. Samen met 12 collega's (allemaal techneuten), ga jij je bezig houden met het bouwen en/of onderhouden van database software. Deze software wordt internationaal ingezet voor het automatiseren van logistieke processen. Jouw werkzaamheden gaan er als volgt uit zien: Je bent in een klein team met developers, verantwoordelijk

Bekijk vacature »

Softwareontwikkelaar Cleopatra

Functieomschrijving: De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van bromen snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie.De opdracht bestaat uit: het programmeren van de diverse modules;het tijdens demo's tonen van de

Bekijk vacature »

Senior C# Software Ontwikkelaar te Zaandam

Bedrijfsomschrijving Deze werkgever heeft als missie om haar klanten op ICT-gebied volledig te ontzorgen. Ze zijn een ICT bedrijf met een verscheidenheid aan ICT oplossingen waaronder Cloud oplossingen en een groot deel van het werk is gericht op software realisatie. Voor de Enterprise-klanten voert het relatief kleine ontwikkelteam waar jij deel uit van kan gaan maken binnen deze organisatie te Zaandam de grootste opdrachten uit. Niet alleen websites en complexe webapplicaties maar ook mobile apps, web services en complete systeemintegraties! Je moet dan denken aan Dynamics, Sharepoint en Salesforce. Je komt hier terecht in een relatief kleine organisatie met ontzettend

Bekijk vacature »

Junior .NET developer

Functie Ons programma is voor afgestudeerde enthousiastelingen die het als een uitdaging zien om met een klein dynamisch team bij de grootste bedrijven van Nederland aan de slag te gaan. Tijdens jouw dienstverband word jij begeleid door een talent manager. Het ontwikkelen van jouw talent staat hierbij centraal. Het programma doorloop je met een team van circa 8 Mede- trainees. De eerste maand start je met een fulltime inhouse opleiding. Deze staat geheel in het teken van de werkzaamheden die jij verder in het programma zult uitvoeren. Na deze opleidingsmaand ga je aan de slag in een dynamische omgeving bij

Bekijk vacature »

Als PHP developer (Symfony) bijdragen aan betere z

Functie Als Medior/Senior PHP developer wordt er een mate van zelfstandigheid verwacht, maar ook dat je goed in een team kunt opereren waar kennis wordt gedeeld en er bijvoorbeeld codereviews plaatsvinden. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden geactualiseerd.

Bekijk vacature »

Front end developer Zorgplatform

Functie Jij als Front end ontwikkelen zult komen te werken samen met 1 PHP ontwikkelaar, 1 Python developer en een flexibele schil aan ontwikkelaars . Samen ga je ervoor zorgen dat de huidige producten doorontwikkeld worden. De Marketplace is geschreven in PHP Laravel en in de front end React. De roostersoftware is ontwikkeld in Python in combinatie met React in de front end. Jij zult als Front ender dus voornamelijk bezig zijn met het verbeteren van onze interfaces op onze verschillende producten. Momenteel ligt de uitdaging in het feit dat de roostersoftware breder schaalbaar moet worden zodat het voor meerdere

Bekijk vacature »

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

PHP Developer

As a PHP Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a PHP Developer at Coolblue? As a PHP Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you are not averse to a little TypeScript or other technologies that might be used. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing vanilla PHP code. Working with

Bekijk vacature »

Softwareontwikkelaar Cleopatra

Functieomschrijving Voor de gemeente Amsterdam zijn wij op zoek naar een softwareontwikkelaar Cleopatra. De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van brom- en snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie. Functie

Bekijk vacature »
Majid Ahddin

Majid Ahddin

30/10/2006 16:23:00
Quote Anchor link
Hoi

ik heb meerdere meningen nodig over een 'project opzet', met name classes en extenden.
Er zijn drie specifieke onderdelen die anders gebruikt worden:

API
Waar tegen aan gepraat wordt in XML, weet niemand iets van, wordt stil afgehandeld.
Heeft db connectie nodig.
Heeft aantal db functies nodig (update, add, etc)
Heeft een aantal 'secrets' nodig opgeslagen in hoofd class (of niet dus)

(Backend) PDU Communicatie
Zelfde soort xml als API, maar dit wordt aangestuurd door de 'gebruiker'.
Heeft ook db en zijn functies nodig.
Wordt aangeroepen vanuit backend GUI
Heeft een aantal 'secrets' nodig opgeslagen in hoofd class (of niet dus)

Backend GUI
Gebruik db en Smarty om info te printen.
Heeft de 'secrets' niet nodig, maar moet wel de backend pdu comm kunnen triggeren (als new Class, niet als extended class (als $this))


Zoals het nu is, is het sowieso echt fout!
Gebruik 4 classes voor de API, waarvan de class die aangeroepen wordt, de main class is met de secrets erin. Die class heeft dus alle functies die nodig zijn in de api.
Omdat in die class de secrets zitten, en ook de db connectie, wordt ie gebruikt (extended) voor het volgende onderdeel: backend pdu communicatie. De secrets zijn keihard nodig en moeten overerfd worden, maar de db conn niet perse (wel nodig) en ook _alle_ api functies zijn beschikbaar en niet nodig.
Omdat de backend GUI de db con ook nodig heeft (en een aantal makkelijk db-data-handlers) wordt de main class weer extended voor de main GUI class. Ook daarin zitten uiteindelijk (als ie aangeroepen wordt) dus superveel (en veel te veel) functies. Weer alle API functies die niet nodig zijn.

Als je ergens een dump maakt van het object (in de GUI of in de PDU comm), is het HUGE. Ongelooflijk veel spul erin (zowel methods als properties) die niet gebruikt worden.

Het enige dat steeds gebruikt wordt (en steeds dezelfde, door deze opzet) is de db connectie. Het is SQLite en niet mijn favoriet, dus wil niet voor elke query een nieuwe db connectie maken. Begrijpelijk toch? Dus de connectie moet ergens opgeslagen worden. SQLite geeft een object terug, dus geen globale database functies (zoals mysql_connect() heeft/geeft).

Een erg belangrijk puntje is de pdu tools (api) package. Het is niet van mij :) En het is bedoeld om niet aangepast te worden. Pas de 3e en 4e class worden veranderd om aan persoonlijke wensen te voldoen... De derde wordt nu alleen gebruikt voor de constructor, waar een stel Hooks worden aangemaakt, en de vierde is de main class vh project (met de db en funcs, etc).

Je denkt vast al dat het slimmer is om het zo en zo te doen. Laat dan snel iets weten :)

Het probleem, nogmaals, is niet de db connectie die overal vanuit 1 punt beschikbaar moet zijn. API en backend worden namelijk nooit tegelijk door dezelfde 'gebruiker' uitgevoerd. Dus die kan op meer dan 1 plaats geinstantieerd worden. Geen probleem! Maar de 'secrets' in de main class staan wel maar op 1 plaats en zijn op 2 plaatsen nodig.

Ik _KAN_ natuurlijk ALLES af laten leiden van die class met secrets en db connectie. Worden nl. overal gebruikt.
Maar dan moet het PDU Tools package ge-extend worden, en daar issie niet zo goed in (en ik niet zo comfortabel).
Kan het op een nog andere manier? Een logische manier, zonder dat er 7 classes aan elkaar hangen met allemaal weer een extra stukje overbodigheid voor de volgende.
Steeds 2 of 3 die achter elkaar hangen, horen achter elkaar (PDUCommPrep -> PDUComm, en PDUToolsGeneric -> PDUToolsReceiver -> PDUToolsHandler, etc) maar _alles_ wordt aan elkaar geslingerd nu.
My doing ja :) maar ben er niet blij mee...

Tips?

Sorry voor het lange verhaal :D bedankt voor het lezen
 
PHP hulp

PHP hulp

19/04/2024 22:19:39
 
Majid Ahddin

Majid Ahddin

30/10/2006 16:26:00
Quote Anchor link
Afbeelding
 
Jelmer -

Jelmer -

30/10/2006 16:36:00
Quote Anchor link
Niet te snel 'extends' willen gebruiken. Alleen waneer ChildClass een ParentClass is, dus 'fiets' mag 'vervoermiddel' wel extenden, maar 'fiets' mag niet 'bel' extenden. Dan pak je gewoon een instance. 'bel' is in dit geval jouw database-communicatie naar mijn idee. Ik zou er gewoon een instance voor gebruiken, eventueel implementeer je een Singelton pattern zodat je overal dezelfde connectie kan gebruiken.

Verder raak ik de draad in het verhaal nog een beetje kwijt, ik denk dat ik het nog een paar keer over moet lezen.
 
Remco van Arkelen

Remco van Arkelen

30/10/2006 16:50:00
Quote Anchor link
't Is inderdaad alles behalve duidelijk, ik raak ook de draad een beetje kwijt in je class-diagram.

Naar mijn idee moet je eens wat lezen over programmeer-patronen, zoek bijvoorbeeld eens naar het befaamde boek "Gang Of Four" of een wat nieuwere: "Patterns Of Enterprise Application Architecture" van Martin Fowler.
 
Majid Ahddin

Majid Ahddin

30/10/2006 18:54:00
Quote Anchor link
Quote:
't Is inderdaad alles behalve duidelijk

nou nou nou sorry hoor :D
singleton gaat niet op in dit geval, zeker niet voor db connectie. Wil nl. niet elke keer een nieuwe db con maken en heb wel heel vaak queries nodig. Maar ook heel vaak niet in dezelfde functie. Dus kan een dbCon global maken, of opslaan in de class die gebruikt wordt. Maar singleton geeft nieuwe instance, dus met nieuwe data, dus met nieuwe connectie << naah
ken genoeg programmeermethoden, vroeg me af hoe jullie het zouden doen. Als je het niet begrijpt, zal ik proberen verder uit te leggen wat de bedoeling is. Ik kom er sowieso wel uit ( en zijn zoveel manieren, en het werkt zoals het nu is :) ), maar ben benieuwd wat als beste wordt bwschouwd door de phphulpers

dank voor reacties iig.

ken "gang of four" :) maar niet die 'wat nieuwere', dus zal es zoeken.
 
Bo az

Bo az

30/10/2006 19:28:00
Quote Anchor link
Singleton is toch juist bedoeld om juist altijd met de zelfde instantie te werken en niet steeds een nieuwe te krijgen?

Als ik je verhaal lees zou ik ook zeggen wat jelmer zegt.

Vooral niet zomaar gaan extenden, maar de verschillende 'objecten' gescheiden houden.
 
Jelmer -

Jelmer -

30/10/2006 19:29:00
Quote Anchor link
Singleton is volgens mij juist zo opgesteld dat je altijd maar 1 instance hebt, en daar via een static functie een reference naar opvraagt. (edit: iemand was mij voor...)

Ik denk dat het handiger als je even een boompje maakt van de klassen en hun kinderen (hun extends) en welken nu welke nodig hebben. Gewoon simpelweg met wat lijntjes.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Majid Ahddin

Majid Ahddin

30/10/2006 22:09:00
Quote Anchor link
Quote:
Ik denk dat het handiger als je even een boompje maakt van de klassen en hun kinderen (hun extends) en welken nu welke nodig hebben. Gewoon simpelweg met wat lijntjes.

Zie dat plaatje dat ik als eerste replie heb gepost :) Duidelijk toch? Dat is zoals het nu is.

Quote:
Singleton is toch juist bedoeld om juist altijd met de zelfde instantie te werken en niet steeds een nieuwe te krijgen?

Een static functie kan niet iets uit een class halen (niets uit $this). Een static functie is opzichzelfstaand. Toch? Dus hij maakt een instance van bijv een database class (depends on dbType dat je meegeeft), of een file handler (depends on het bestandstype dat je meegeeft), etc. Ik zou niet weten hoe een Singleton oplossing mij een instance kan geven van steeds hetzlefde object. Wel hetzelfde object natuurlijk, maar niet dezende instance van het object. Voor db class (vooral SQLite, zo heb ik begrepen) is dit niet de oplossing, omdat er steeds een live handler wordt gemaakt naar een bestand op het filesystem. Wat ik moet hebben, is een global DB instance, maar dan niet global, want ik houd niet van global :D Zoals je altijd mysql_query() kan aanroepen (de connectie is opgeslagen in de php 'buffer') als je een keer connectie hebt gemaakt, zonder de connectie mee te geven aan de functie.

Als je weet hoe het moet zou ik echt heel graag een voorbeeldje o.i.d. zien. Ik ben geen fan van Singleton, omdat ik alles zo min mogelijk aanroep en liever even opsla in de php buffer. Bijvoorbeeld in een class, in $this. Met een static functie kan ik niets uit $this halen :(

Ik maak gebruik van een DependsOn functie. Zowel met by-reference calling, als return value en ook met $this setten. Zo houd ik bijvoorbeeld de Smarty instance live en paraat. Misschien kan het ook met SQLite, maar alleen binnen het object.
DependsOn geeft een parameter mee (een constante van een class) die in een switch wordt bekeken en aan de hand daarvan wordt een waarde teruggegeven, opgeslagen in $this, of opgeslagen in de by-reference var.
Een voorbeeldje
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

class ABC
{
    function
mf_DependsOn( $ulDependancy )
    {

        switch ( $ulDependancy )
        {
            case
ABC::Smarty:
                if ( isset($this->m_objSmarty) )
                {

                    return $this->m_objSmarty;
                }

                else
                {
                    $this->m_objSmarty = new CVM_SmartyBackofficeUI;
                    return $this->m_objSmarty;
                }

            break;

            case
ABC::SQLite:
                // zelfde verhaaltje hier, maar dan voor CVM_SQLiteDatabase("memory")
            break;
        }
    }

}


?>


Werkt redelijk. Zal echter in elk object instance een nieuwe connectie maken, omdat er nog geen is opgeslagen in $this.
In mijn huidige set-up heb ik maar op 1 locatie in de hele app een db connectie instance. In de constructor van CPServer.

Dank voor replies :)

Misschien snap ik Singleton niet, kan natuurlijk best ;)
Iemand makkelijk duidelijk voorbeeldje of website? Dank
 
Bo az

Bo az

30/10/2006 22:26:00
Quote Anchor link
Hier staat een voorbeeld van hoe ik een tijdje terug een sigleton database class gemaakt heb met zowel MySQL als ODBC.

Aangezien het al even geleden is dat ik het heb kunnen bijwerken omdat ik voor school druk ben met Java, is het niet verstandig om code over te nemen maar misschien kan je iets met het sigleton iedee.

Een beetje uitleg: Er wordt een static variabele gebruikt om de instanties op te slaan, bestaat er een instantie dan wordt die uit de static variabele gehaald, anders wordt er een nieuwe instantie gemaakt en in de static variabele opgeslagen.
 
Jelmer -

Jelmer -

30/10/2006 23:42:00
Quote Anchor link
Ook variabelen kunnen static zijn binnen een klasse. En als je nu een instance van de klasse in de static variabele doet, tada, 1 instance in je hele script. Zie dit voorbeeld op phppatterns.com.
 
Majid Ahddin

Majid Ahddin

31/10/2006 09:30:00
Quote Anchor link
maar een static var binnen een class verandert niet door een functie in die class, toch? :) Of heb ik het helemaal verkeerd begrepen? Daarom is het toch static?

-- edit
Ik ga naar de voorbeeldjes kijken. Dank!

-- edit
Het script van Boaz zluit het meest aan bij dat van mij, wel ongeveer wat ik vaker doe. Maar dan met DependsOn ipv getInstance :)
Zo ga ik het doen. Zet ik die functie onderaan in een class onderaan en laat elke class afleiden van die class. Kortere rijen, overzichtelijker en een hoop minder rotzooi die wordt onthouden.
dank voor jullie hulp!
Gewijzigd op 01/01/1970 01:00:00 door Majid Ahddin
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.