{"id":22537,"date":"2026-02-23T11:41:40","date_gmt":"2026-02-23T09:41:40","guid":{"rendered":"https:\/\/www.btc-embedded.com\/?p=22537"},"modified":"2026-02-23T11:41:40","modified_gmt":"2026-02-23T09:41:40","slug":"service-oriented-architecture-in-sdvs","status":"publish","type":"post","link":"https:\/\/www.btc-embedded.com\/zh-hans\/service-oriented-architecture-in-sdvs\/","title":{"rendered":"Service-Oriented Architecture in SDVs, and the Role of SOME\/IP"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"22537\" class=\"elementor elementor-22537\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-af1b7f8 e-flex e-con-boxed e-con e-parent\" data-id=\"af1b7f8\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6592bf7 elementor-widget elementor-widget-heading\" data-id=\"6592bf7\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Why SOA is taking the lead in SDVs<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c9737ae elementor-widget elementor-widget-text-editor\" data-id=\"c9737ae\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Software-defined vehicle programs scale features across domains, ECUs, and product generations. This makes signal-centric integration increasingly expensive. Every new feature adds more \u201cwiring\u201d: more signals, more routing rules, more integration effort, and more opportunities for hidden coupling.<\/p><p>At the same time, the underlying vehicle topology is changing. Instead of dozens of function-specific ECUs talking mostly over classic buses, many programs move toward a <strong>central compute<\/strong> approach with one or more <strong>HPCs (High-Performance Computers)<\/strong> for software-heavy functions, combined with a <strong>zonal architecture<\/strong>.<\/p><ul><li><strong>Zonal controllers<\/strong> sit close to sensors\/actuators (short wiring, local I\/O aggregation).<\/li><li>A high-bandwidth backbone (often <strong>Ethernet<\/strong>) connects zones to the HPC(s).<\/li><li>Software functions can be consolidated, moved, or updated without redesigning the entire communication matrix.<\/li><\/ul><p>With zonal controllers and HPCs, <strong>function placement becomes fluid<\/strong>. If your interfaces assume a fixed ECU location, they will hinder functional clustering, redeployment, or OTA-driven evolution. <strong>SOA shifts integration from \u201cwhere\u201d to \u201cwhat\u201d<\/strong>: consumers bind to service contracts, so software can evolve independently of the underlying zones\/HPC topology.<\/p><p>Named programs moving toward a central compute appraoch include: <a href=\"https:\/\/www.bmwgroup.com\/en\/news\/general\/2025\/superbrains.html\" target=\"_blank\" rel=\"noopener\">BMW\u2019s Neue Klasse<\/a>, <a href=\"https:\/\/cariad.technology\/de\/en\/news\/stories\/Volkswagen-develops-electrical-architecture-in-china-with-xpeng.html\" target=\"_blank\" rel=\"noopener\">Volkswagen\/CARIAD&#8217;s High-performance E\/E architecture<\/a>, <a href=\"https:\/\/media.stellantisnorthamerica.com\/newsrelease.do?id=25945&amp;mid=1\" target=\"_blank\" rel=\"noopener\">Stellantis&#8217; STLA Brain,<\/a> <a href=\"https:\/\/www.volvocars.com\/intl\/media\/press-releases\/A092D70113FB5A9A\/\" target=\"_blank\" rel=\"noopener\">Volvo\u2019s \u201cSuperset\u201d tech stack<\/a>, and <a href=\"https:\/\/group.mercedes-benz.com\/innovation\/digitalisation\/connectivity\/mb-os.html\" target=\"_blank\" rel=\"noopener\">Mercedes-Benz&#8217;s MB.OS chip-to-cloud stack<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6418490 elementor-widget elementor-widget-heading\" data-id=\"6418490\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">From signals to services: architectural implications<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0c3c850 elementor-widget elementor-widget-text-editor\" data-id=\"0c3c850\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Signal-based designs encourage <strong>implicit coupling<\/strong>: a receiver must know exactly which signal, where it lives, and how to interpret update rates and validity.<\/p><p>Consider a simple data item like <em>VehicleSpeed<\/em> in an <a href=\"https:\/\/www.btc-embedded.com\/autosar-architecture-what-every-function-developer-should-know\/\">AUTOSAR Classic<\/a> architecture.\u00a0It is typicially model as Sender\/Receiver signal at the RTE level\u00a0then \u201cwired\u201d through several configuration layers until it finally appears on a bus message.\u00a0When you add a new consumer (another ECU\/function) you often have to update not only the application, but also the communication configuration and network description, even though the feature change looks small.<\/p><p>That is exactly the kind of integration friction SDV programs try to avoid: when the meaning of data is buried in configuration and network descriptions instead of being defined by a clear service contract. <a href=\"https:\/\/www.btc-embedded.com\/autosar-classic-vs-adaptive\/\">AUTOSAR Adaptive<\/a> is the new AUTOSAR standard aiming to standardize how software components can communicate via service-centric design.<\/p><p>Services move the semantics into the interface:\u00a0A <strong>provider<\/strong> declares what it offers (data + operations).\u00a0A <strong>consumer<\/strong> binds to that contract, not to a specific ECU or a specific signal layout.\u00a0Service availability can be <strong>dynamic<\/strong> (startup dependencies, optional features), and consumers can react accordingly.<\/p><p>For example, a <strong><em>Window Controller<\/em><\/strong> app can subscribe to a\u00a0<em>VariantConfig<\/em>\u00a0service and only expose <strong>rear-window child lock<\/strong>\u00a0or\u00a0<strong>remote window closing<\/strong> if the vehicle configuration says those optional functions are present.<\/p><p>In SDV programs, this typically leads to two practical consequences:<\/p><ol><li><strong>A service boundary becomes a reuse boundary.<\/strong> If the service contract stays stable, the implementation can move or be replaced with contained impact.<\/li><li><strong>Cross-domain functions become composable.<\/strong> Features are built by consuming multiple services rather than by tapping into a growing signal list.<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d1a4e6 elementor-widget elementor-widget-heading\" data-id=\"3d1a4e6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">SOME\/IP in that picture<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1c5202c elementor-widget elementor-widget-text-editor\" data-id=\"1c5202c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>SOME\/IP (Scalable service-Oriented MiddlewarE over IP) is an <a href=\"https:\/\/www.autosar.org\/fileadmin\/standards\/R24-11\/FO\/AUTOSAR_FO_PRS_SOMEIPProtocol.pdf\" target=\"_blank\" rel=\"noopener\">AUTOSAR-defined<\/a> <strong>middleware protocol<\/strong> for service-oriented ECU-to-ECU communication over IP, typically Automotive Ethernet. It gained traction with the move to Ethernet to support higher-bandwidth and more software-driven use cases, and it is commonly used to <strong>complement or replace<\/strong> signal-centric communication when a clearer service contract and more flexibility are needed.<\/p><p>The key idea is still simple: devices <strong>offer services<\/strong>, and other devices <strong>discover and consume<\/strong> them dynamically. SOME\/IP Protocol or Transport layer defines the message framing and the interaction types (methods, events, fields); <a href=\"https:\/\/www.autosar.org\/fileadmin\/standards\/R24-11\/FO\/AUTOSAR_FO_PRS_SOMEIPServiceDiscoveryProtocol.pdf\" target=\"_blank\" rel=\"noopener\">SOME\/IP\u2011SD (Service Discovery)<\/a>, another stack on top, complements it by handling dynamic service availability. It is widely adopted in both AUTOSAR Classic and Adaptive (and beyond). In practice, many teams prototype or integrate using the open-source <strong>vSOMEIP<\/strong> stack (Linux), maintained under <a href=\"https:\/\/covesa.global\/project\/vsomeip\/\" target=\"_blank\" rel=\"noopener\">COVESA\u2019s vSOMEIP project<\/a>. Today, SOME\/IP shows up in typical SDV \u201cbackbone\u201d use cases: In\u2011Vehicle Infotainement services, ADAS\/sensor data exchange, centralized compute\/zonal architectures, and ECU-to-ECU service communication.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-de8a8d2 elementor-widget elementor-widget-heading\" data-id=\"de8a8d2\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Communication model: what is exchanged<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9acadb0 elementor-widget elementor-widget-text-editor\" data-id=\"9acadb0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>SOME\/IP communication is <strong>message-based<\/strong>. Instead of \u201cwiring signals\u201d, participants exchange messages that clearly state <strong>which service\/instance<\/strong> is addressed and <strong>which interface element<\/strong> is used.<\/p><p>Most interactions can be understood with just two primitives:<\/p><ul><li><strong>Call<\/strong><strong> style<\/strong><strong> (Request\/Response):<\/strong> a consumer sends a request and the provider returns a response.<\/li><li><strong>Notify <\/strong><strong>Style <\/strong><strong>(Publish\/Subscribe):<\/strong> a consumer subscribes, and the provider publishes notifications to all subscribers.<\/li><\/ul><p>These primitives enable three interaction types: Methods, Events, and Fields. The later reflect the three most common integration needs in vehicles <strong>a<\/strong><strong>s well as<\/strong> the patterns software engineers already know from distributed systems.<\/p><ul><li><strong>Methods<\/strong>: <em><strong>\u201cDo something \/ give me an answer.\u201d<\/strong><\/em> Methods follow the familiar client\u2013server Remote Procedure Call (RPC) idea: explicit commands\/queries with clear success and error handling.<\/li><li><strong>Events<\/strong>: <em><strong>\u201cSomething happened \/ here is the latest update.\u201d<\/strong><\/em>. Events follow publish\/subscribe messaging: efficient fan-out for updates and notifications.<\/li><li><strong>Fields<\/strong>: <em><strong>\u201cThis is state.\u201d<\/strong><\/em> Fields borrow from property\/state semantics: a clean way to model \u201ccurrent value + change events\u201d without forcing every consumer to reconstruct state from a stream of events<\/li><\/ul><p>At a practical level, the interface is identified by IDs that both sides agree on:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c085fe8 elementor-widget elementor-widget-image\" data-id=\"c085fe8\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"100\" src=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.14.58-scaled.png\" class=\"attachment-large size-large wp-image-22549\" alt=\"Service-Oriented Architecture - Code 1\" srcset=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.14.58-scaled.png 2560w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.14.58-768x96.png 768w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.14.58-1536x192.png 1536w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.14.58-2048x256.png 2048w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9d8d5b elementor-widget elementor-widget-heading\" data-id=\"d9d8d5b\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Basic flow of the independent building blocks<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dc86139 e-grid e-con-full e-con e-child\" data-id=\"dc86139\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-18a34a8 elementor-widget elementor-widget-image\" data-id=\"18a34a8\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/a_service_availability.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"a_service_availability\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MjI1NDAsInVybCI6Imh0dHBzOlwvXC93d3cuYnRjLWVtYmVkZGVkLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDJcL2Ffc2VydmljZV9hdmFpbGFiaWxpdHkucG5nIn0%3D\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"352\" src=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/a_service_availability.png\" class=\"attachment-large size-large wp-image-22540\" alt=\"\" srcset=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/a_service_availability.png 1269w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/a_service_availability-768x338.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2899f0f elementor-widget elementor-widget-image\" data-id=\"2899f0f\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/b_call_style.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"b_call_style\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MjI1NDMsInVybCI6Imh0dHBzOlwvXC93d3cuYnRjLWVtYmVkZGVkLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDJcL2JfY2FsbF9zdHlsZS5wbmcifQ%3D%3D\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"352\" src=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/b_call_style.png\" class=\"attachment-large size-large wp-image-22543\" alt=\"\" srcset=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/b_call_style.png 1269w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/b_call_style-768x338.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-398e852 elementor-widget elementor-widget-image\" data-id=\"398e852\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/c_notify_style.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"c_notify_style\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MjI1NDYsInVybCI6Imh0dHBzOlwvXC93d3cuYnRjLWVtYmVkZGVkLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDJcL2Nfbm90aWZ5X3N0eWxlLnBuZyJ9\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"350\" src=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/c_notify_style.png\" class=\"attachment-large size-large wp-image-22546\" alt=\"\" srcset=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/c_notify_style.png 1269w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/c_notify_style-768x336.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-103c8b2 elementor-widget elementor-widget-heading\" data-id=\"103c8b2\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">How Methods, Events, and Fields map onto the building blocks<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4276af5 elementor-widget elementor-widget-text-editor\" data-id=\"4276af5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A <strong>method<\/strong> uses (B): a consumer sends a request addressed to a METHOD_ID, and the provider returns a response. You may also use a \u201cfire-and-forget\u201d variant where no response is expected.<\/p><p>An <strong>event<\/strong> uses (C): consumers subscribe an event group and requests an Event based on EVENT_ID within the group, and the provider publishes notifications whenever it has something to announce.<\/p><p>A <strong>field<\/strong> combines both worlds. Reading or writing the state (getter\/setter) uses (B), while observing state changes uses (C) through a field-change notification carried like an event.<\/p><p>This mapping is what keeps the overall model simple: once you understand the call style and the notify style, the three interaction types become a matter of intent and contract design, not a new protocol to learn each time.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d1e3e94 elementor-widget elementor-widget-heading\" data-id=\"d1e3e94\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The three interaction types pseudo-code examples<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee356ae elementor-widget elementor-widget-heading\" data-id=\"ee356ae\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Methods \u2013 request\/response operations<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-56ee643 elementor-widget elementor-widget-text-editor\" data-id=\"56ee643\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"margin: 6.0pt 0cm 0cm 0cm;\"><span style=\"font-size: 11.0pt; font-family: Inter;\">Use a method when the client wants to trigger a defined operation and get a result (or an error). Think commands, queries, transactions, diagnostics.<\/span><\/p><p style=\"margin: 6.0pt 0cm 0cm 0cm;\"><span style=\"font-size: 11.0pt; font-family: Inter;\">In the example pseudo-code below, Client calls a method from Server that doubles a given value (5.5)<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4535824 elementor-widget elementor-widget-image\" data-id=\"4535824\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"493\" src=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.21.32.png\" class=\"attachment-large size-large wp-image-22552\" alt=\"Service-Oriented Architecture - Code 3\" srcset=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.21.32.png 1796w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.21.32-768x473.png 768w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.21.32-1536x946.png 1536w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42dade1 elementor-widget elementor-widget-heading\" data-id=\"42dade1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Events \u2013 publish\/subscribe notifications<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2dc4938 elementor-widget elementor-widget-text-editor\" data-id=\"2dc4938\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Use an event when the provider publishes updates asynchronously to one or more consumers. This fits status updates, sensor-style data, and \u201csomething happened\u201d notifications.<\/p><p>In the example pseudo-code below, Server sends notification upon speed value exceeding a certain limit to the Client which displays it.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e1481a7 elementor-widget elementor-widget-image\" data-id=\"e1481a7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"501\" src=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.23.17.png\" class=\"attachment-large size-large wp-image-22555\" alt=\"Service-Oriented Architecture - Code 3\" srcset=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.23.17.png 1792w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.23.17-768x481.png 768w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.23.17-1536x962.png 1536w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1fb5e0c elementor-widget elementor-widget-heading\" data-id=\"1fb5e0c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Fields \u2013 state + get\/set + change notification<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b440672 elementor-widget elementor-widget-text-editor\" data-id=\"b440672\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Use a field when you expose state. A field makes the &#8220;current value&#8221; explicit via getter method, optional updates explicit via setter method, and still supports observation (field-change notification).<\/p><p>In the example pseudo-code below, Client gets the current Temperature, then sets it and is being notified of changed value.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ffddada elementor-widget elementor-widget-image\" data-id=\"ffddada\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"967\" src=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.27.51.png\" class=\"attachment-large size-large wp-image-22558\" alt=\"Service-Oriented Architecture - Code 4\" srcset=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.27.51.png 1798w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.27.51-768x929.png 768w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.27.51-1270x1536.png 1270w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-2026-02-23-um-10.27.51-1694x2048.png 1694w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-77aaed5 elementor-widget elementor-widget-heading\" data-id=\"77aaed5\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusion<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e195fbf elementor-widget elementor-widget-text-editor\" data-id=\"e195fbf\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>SOME\/IP maps well to SDV integration because it matches how teams want to collaborate: via explicit service contracts and a small set of interaction types. If you design the interface intentionally (Methods vs Events vs Fields), the rest of the stack becomes significantly easier to evolve and test.<\/p><p>A practical way to keep contracts clean is to choose the interaction type based on intent. If a consumer needs to <strong>trigger an operation and get a result<\/strong>, use a <strong>method<\/strong> (clear request\/response and error handling). If you need to <strong>distribute updates to one or many consumers<\/strong>, use an <strong>event<\/strong> (publish\/subscribe fan\u2011out). If you are exposing <strong>state<\/strong> that consumers must be able to read reliably, and optionally write, model it as a <strong>field<\/strong> (getter\/setter plus change notification as one concept). As a rule of thumb: whenever consumers need a well-defined <em>current value<\/em>, prefer a field over a pure stream of events; it avoids every consumer rebuilding state and resynchronization logic on its own.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Why SOA is taking the lead in SDVs Software-defined veh [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":22567,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[52,222,250],"product":[],"use_cases":[],"class_list":["post-22537","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-autosar","tag-sdv","tag-service-oriented-architecture"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/posts\/22537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/comments?post=22537"}],"version-history":[{"count":9,"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/posts\/22537\/revisions"}],"predecessor-version":[{"id":22570,"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/posts\/22537\/revisions\/22570"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/media\/22567"}],"wp:attachment":[{"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/media?parent=22537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/categories?post=22537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/tags?post=22537"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/product?post=22537"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.btc-embedded.com\/zh-hans\/wp-json\/wp\/v2\/use_cases?post=22537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}