Kiến trúc phần mềm phụ thuộc bao nhiêu vào ngôn ngữ?


14

Trong khi tự học về kiến ​​trúc phần mềm và các mẫu thiết kế, tôi nhận thấy rằng trong hầu hết các trường hợp, một số tính năng ngôn ngữ và đặc thù thiết kế được ngụ ý trong phần giải thích.

Ví dụ, thực tế bất kỳ bài viết hoặc cuốn sách về điều đó sẽ minh họa các ý tưởng bằng cách sử dụng các lớp và giao diện. Mọi thứ người ta có thể dễ dàng tìm thấy trong chủ đề này sẽ đề cập đến các đối tượng và khái niệm OOP.

Điều gì xảy ra nếu ngôn ngữ, trong đó hệ thống được viết không có khái niệm như vậy? Ví dụ: nếu tôi sử dụng Python hoặc Node, được gõ động và không có khái niệm về giao diện thì sao? Điều gì xảy ra nếu tôi sử dụng TypeScript trong đó giao diện là cấu trúc phù du, không tồn tại trong thời gian chạy? Điều gì xảy ra nếu tôi đang cố gắng nắm lấy lập trình chức năng? Tôi có nên bỏ qua ví dụ RẮN và tìm kiếm các khái niệm khác, phù hợp với ngôn ngữ của tôi không?

Nếu có, đó là những gì? Thật không may, tất cả các mô hình được chấp nhận tốt (theo như tôi biết) đều đề cập đến các khái niệm và loại OOP theo một cách nào đó. Nếu không, tôi nên tuân theo quy tắc nào khi điều chỉnh các nguyên tắc thiết kế và kiến ​​trúc chung cho ngôn ngữ và trường hợp sử dụng cụ thể của mình?

Làm thế nào nói chung bạn sẽ mô tả sự phụ thuộc giữa kiến ​​trúc và ngôn ngữ?


Tôi đã viết một bài viết về kiến trúc phần mềm: Quản lý phần mềm phức tạp linkedin.com/pulse/...
overexchange

Thứ nhất, vâng, kiến ​​trúc phần mềm được điều khiển dựa trên công nghệ mà bạn có trong đầu. Ví dụ: python không tận dụng đa luồng cho đến khi các luồng đó bị ràng buộc IO. Đây là một hạn chế thực sự trong việc sử dụng các hoạt động ràng buộc cpu đa lõi. Thứ hai, bạn nên lắng nghe điều này ... youtu.be/FF-tKLISfPE Thứ ba, bạn nên phân tích / làm việc trên các sản phẩm doanh nghiệp phân tán ổn định hiện có của miền cụ thể được triển khai có thể mở rộng trong ít nhất 5-6 năm. Đây là một sự hiểu biết hữu cơ về cách công nghệ ảnh hưởng đến thiết kế. Btw..Such sản phẩm đã được viết trong thế giới tiền java, từ đầu.
trao đổi quá mức

Công nghệ Wrt ... Trong thế giới Java, cho đến khi thiết kế ngôn ngữ java 5/6/7 nằm trong tầm kiểm soát của những người sáng lập thực tế. Từ java 8, tôi sẽ coi java như một cỗ máy tuyên truyền nhưng không phải là ngôn ngữ lập trình. Theo tôi, java đã trở thành công nghệ quản lý dự án. Vì vậy, là người mới bắt đầu, tôi sẽ phân tích / làm việc trên một sản phẩm được viết bằng C / C ++ / Python
trao đổi quá mức vào

Xin vui lòng không sử dụng kiến ​​trúc từ trong câu hỏi của bạn, nó gây nhầm lẫn. Câu hỏi của bạn là về thiết kế. Sự lựa chọn ngôn ngữ thường đủ điều kiện là kiến ​​trúc, câu hỏi của bạn không có ý nghĩa như cách nó được diễn đạt ..
Martin Maat

Cũng trăn và javascript làm có giao diện, họ chỉ không sử dụng từ khóa riêng biệt để phân ranh giới họ
Caleth

Câu trả lời:


11

Một kiến ​​trúc phần mềm rất giống với kiến ​​trúc của một ngôi nhà hoặc một cây cầu. Một cây cầu phải giữ trọng lượng của chính nó và các phương tiện lái qua nó hoặc những người đi qua nó. Nó phải chịu được thời tiết. Các vật liệu mà bạn sử dụng để xây dựng nó phải vừa mạnh vừa tương đối nhẹ.

Có rất nhiều vật liệu bạn có thể sử dụng để xây dựng một ngôi nhà. Bạn có thể sử dụng gạch hoặc vữa. Bạn có thể sử dụng dầm gỗ hoặc kim loại. Mỗi vật liệu có những đặc điểm riêng, về trọng lượng, sức mạnh, v.v. Tất cả những đặc điểm này ảnh hưởng đến kiến ​​trúc.

Theo cùng một cách, ngôn ngữ lập trình bạn sử dụng ảnh hưởng đến cách bạn xây dựng kiến ​​trúc của mình. Kiến trúc của bạn sẽ trông khác với ngôn ngữ lập trình có các lớp như C ++ so với ngôn ngữ lập trình không giống như C.

Các nguyên tắc RẮN chủ yếu là về các ngôn ngữ hướng đối tượng (tức là các ngôn ngữ có các lớp).


4

Kiến trúc phụ thuộc vào khả năng để đáp ứng mục tiêu của nó. Lựa chọn ngôn ngữ có thể giới hạn khả năng. Bất kỳ ngôn ngữ hoàn chỉnh Turing nào cũng có khả năng hoàn thành bất kỳ nhiệm vụ lập trình nào. Sau thời điểm đó, về cách con người có thể đọc được ngôn ngữ cho phép giải pháp.

Nhiều sơ đồ kiến ​​trúc phần mềm yêu cầu bạn loại bỏ tất cả kiến ​​thức về lựa chọn công nghệ khỏi các quy tắc kinh doanh tên miền cốt lõi. Lựa chọn kỹ thuật mà bạn không bao giờ có thể loại bỏ kiến ​​thức từ cốt lõi là ngôn ngữ bạn chọn để diễn đạt nó.

Khi sách về Kiến trúc dính vào việc nói với bạn về mục tiêu của họ, ngôn ngữ không thành vấn đề miễn là nó có khả năng đạt được mục tiêu. Khi những cuốn sách cho bạn biết làm thế nào để đạt được những mục tiêu này, ngôn ngữ bắt đầu trở thành vấn đề.


Những điểm hay trong câu trả lời của bạn, nhưng chắc chắn, kiến ​​trúc phần mềm trong lịch sử đã được triển khai với xu hướng CÔNG NGHỆ.
trao đổi quá mức

@overexchange quan điểm của một kiến ​​trúc tốt là sản xuất phần mềm có thể tồn tại lâu hơn xu hướng hiện tại bằng cách sẵn sàng cho phần tiếp theo.
candied_orange

Trong thế giới phần mềm trung gian, các kiến ​​trúc sản phẩm không thể nghĩ xa hơn RPC / RMI / CORBA cho đến những năm 1990. Tôi thấy các thiết kế cổ điển dựa trên các cuộc gọi làm lại theo định hướng thủ tục. Sau đó, ServiceOArch đã thay đổi xu hướng của phần mềm trung gian, về mặt kiến ​​trúc.
trao đổi quá mức

2
@CandiedOrange đó là lý thuyết. Trong thực tế, tôi đã thấy rất nhiều người làm điều mà đôi khi được gọi là "phát triển theo hướng cường điệu" - chỉ cần làm những gì mà các đồng nghiệp hiện tại của họ đang nói nhiều nhất tại thời điểm Thiết kế để bạn có thể tham gia vào cuộc nói chuyện đó.
marstato

@marstato Đồng ý. Ví dụ tốt nhất là, sử dụng Spring / Springboot trong xu hướng hiện tại, cho bất kỳ dự án mới nào, mà không biết, tại sao?
trao đổi quá mức

1

Kiến trúc như một thuật ngữ có một ý nghĩa thực sự cụ thể rất liên quan đến kiến ​​trúc trong thế giới vật chất và cốt lõi của nó là về nghệ thuật và thực hành xây dựng mọi thứ, về cách mọi thứ được tạo ra và kết hợp với nhau. Theo cách đó, khi kiến ​​trúc được thực hiện tốt, tôi nghĩ rằng ngôn ngữ gắn liền với kiến ​​trúc, giống như một tòa nhà có kiến ​​trúc tốt nên được thông báo mật thiết bằng vật liệu mà nó được xây dựng.

Trong phần mềm, các lựa chọn kiến ​​trúc nên được thực hiện theo cách phù hợp với các thuộc tính của ngôn ngữ. Nếu bạn đang xây dựng một hệ thống với ngôn ngữ hướng đối tượng, thì tôi cũng mong kiến ​​trúc của hệ thống cũng hướng đối tượng. Nếu bạn đang xây dựng một hệ thống với ngôn ngữ chức năng thì tôi sẽ mong kiến ​​trúc của hệ thống đó cũng có chức năng.

Có lý?


Cám ơn phản hồi của bạn! bất kỳ cơ hội nào bạn có biết về bất kỳ tài nguyên nào, xây dựng trên kiến ​​trúc phần mềm liên quan đến ngôn ngữ được gõ động hoặc chức năng không? tbh tất cả những gì tôi đã thấy hoạt động ví dụ Java ngay lập tức nhưng sẽ yêu cầu một số điều chỉnh cho ví dụ js. Những hướng dẫn khả thi nào để điều chỉnh các mẫu kiến ​​trúc phổ biến thành một ngôn ngữ được đánh máy yếu? Người ta thậm chí nên thử điều đó hay nó nên hoàn toàn khác biệt?
Tristan Tzara

mối quan tâm của tôi là nếu một người đang sử dụng ví dụ Java, thì có rất nhiều thực tiễn và mô hình tốt nhất cho kiến ​​trúc, nhưng tôi chưa thấy ngôn ngữ nào thuộc loại khác. Vì vậy, tôi đã tự hỏi, làm thế nào để đối xử với những người đó
Tristan Tzara

về cơ bản, ví dụ RẮN vẫn đứng trong trường hợp như vậy? Làm thế nào để một người thích ứng nó nếu có? người ta phải làm gì nếu không có?
Tristan Tzara

Các nguyên tắc RẮN là rất hướng đối tượng trong nguồn gốc. Tuy nhiên tôi nghĩ rằng họ mã hóa các nguyên tắc bậc cao hơn có thể áp dụng cho bất kỳ hệ thống phần mềm nào, bất kể ngôn ngữ. Nhưng các nguyên tắc thô sơ chính xác là: bạn nên biết và hiểu chúng trước khi xây dựng nhiều hơn một bộ nạp chim.
RibaldEddie

@TristanTzara Lập trình hướng đối tượng đã được phát minh trước đó và không có ngôn ngữ hướng đối tượng. Bạn có thể làm điều đó trong bất kỳ ngôn ngữ mục đích chung. Ngay cả những người không có lớp học.
candied_orange

1

Tôi muốn nói, để bắt đầu, ngay cả ngôn ngữ bạn nghĩ cũng có ảnh hưởng sâu sắc đến những gì bạn có thể hình dung. Có một lý do PASCAL được tạo ra bởi Niklaus Wirth và C bởi Brian Kernighan và Dennis Ritchie.

Ở cấp độ cao hơn, khả năng diễn đạt các khái niệm nhất định (và thiếu các khái niệm khác) sẽ định hướng suy nghĩ của bạn và khiến bạn đi đến một số giải pháp nhất định không nhất thiết phải là cùng một người khác, với một nền tảng khác, sẽ xuất hiện.

Cuối cùng, tất cả các khái niệm bạn đề cập có thể được thực hiện trong bất kỳ ngôn ngữ có mục đích chung nào. Chỉ là họ có thể không có hỗ trợ cú pháp trong đó và việc thực hiện có thể rườm rà. Bạn có thể viết mã lắp ráp x86 hướng đối tượng nếu bạn đủ cam kết (hoặc đủ điên rồ) giống như bạn có thể với C. Trên thực tế, các triển khai đầu tiên của C ++ là các bộ tiền xử lý đã biên dịch mã C ++ của bạn thành C (và các tên biểu tượng được xáo trộn gỡ lỗi vui hơn rất nhiều).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.