Tilbake til bloggen
Guide25. februar 2026

Java: Enterprise-erfaring og hva jeg tok med meg videre

Java er ikke et språk jeg bruker daglig lenger. Men det er språket som lærte meg å tenke i systemer — interfaces, dependency injection, lagdelt arkitektur og designmønstre som holder seg når kodebasen vokser. Den kunnskapen bruker jeg hver dag, bare i andre språk.

Hva Java lærte meg

Jeg jobbet med Java i enterprise-kontekst — store systemer med mange utviklere, lange livssykluser og strenge krav til vedlikeholdbarhet. Det tvinger deg til å tenke annerledes enn når du skriver en rask prototype.

Interfaces som kontrakter. Java lærte meg å designe API-er før implementasjon. Du definerer et interface, avtaler kontrakten, og implementasjonen kan byttes ut uten at resten av systemet vet det. Det samme prinsippet bruker jeg nå i Go med implicit interface satisfaction og i TypeScript med abstrakte typer.

Dependency injection. Spring Framework sin DI-container var min introduksjon til løs kobling. Konseptet — at en komponent ikke selv oppretter sine avhengigheter, men mottar dem utenfra — er fundamentalt for testbar og vedlikeholdbar kode. Nå bruker jeg det i Go med constructor injection og i FastAPI med Depends().

Typesikkerhet som verktøy. Java sitt strenge typesystem føltes rigid da jeg lærte det. Nå verdsetter jeg det. TypeScript sitt typesystem er inspirert av mange av de samme ideene, og Go sin kompilator fanger feil som dynamiske språk lar gli gjennom.

Service-mønsteret

Et mønster jeg tok med meg fra Java til alt annet jeg bygger:

public interface CourseService {
    List<Course> findAll();
    Optional<Course> findById(String id);
    Course create(CreateCourseRequest request);
}

public class CourseServiceImpl implements CourseService {
    private final CourseRepository repository;
    private final EventPublisher events;

    public CourseServiceImpl(CourseRepository repository, EventPublisher events) {
        this.repository = repository;
        this.events = events;
    }

    @Override
    public Course create(CreateCourseRequest request) {
        Course course = Course.from(request);
        repository.save(course);
        events.publish(new CourseCreatedEvent(course.getId()));
        return course;
    }
}

Interface foran implementasjon. Avhengigheter injisert via konstruktøren. Forretningslogikk separert fra infrastruktur. Dette mønsteret oversetter direkte til Go-koden min for Tuli og til TypeScript-tjenester i Next.js-prosjekter.

Oppsummering

Jeg skriver ikke Java til daglig, men tankegodset fra Java-verdenen preger alt jeg bygger. Interfaces, DI, lagdelt arkitektur — det er universelle prinsipper som fungerer uavhengig av språk. Hvis du bare har jobbet med dynamiske språk, er det verdt å forstå hva statisk typede enterprise-språk som Java bringer til bordet.


Del av en serie: Denne guiden er en del av en samling tekniske innlegg om verktøyene og språkene jeg bruker.

#java#enterprise#backend#oop

Nyhetsbrev

Få nye innlegg rett i innboksen.