JaroslavTulach at 13:29, 7 May 2019 - 2019-05-07 13:29:10

←Older revision Revision as of 13:29, 7 May 2019
Line 3: Line 3:
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
-
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|Many to Many]] and [[Vendor library|One to Many]] and [[Semantic versioning|Few to Many]] cases. However, without having [[experience]] with the [[Modular library|Many to Many]] case, they fallback to most obvious solution: Use of [[abstract class]]s. While extending [[abstract class]]es with new methods is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
+
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|Many to Many]] and [[Vendor library|One to Many]] and [[Semantic versioning|Few to Many]] cases. However, without having [[experience]] with the [[Modular library|Many to Many]] case, they fallback to most obvious solution: Use of [[abstract class]]es (or these days interfaces with [[DefaultMethods]]). While extending [[abstract class]]es with new methods is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around than to admit they are [[proximity|distant]]. Then the best thing to do is to accept the design style suitable for [[modular library]].
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around than to admit they are [[proximity|distant]]. Then the best thing to do is to accept the design style suitable for [[modular library]].

JaroslavTulach at 19:41, 12 May 2012 - 2012-05-12 19:41:03

←Older revision Revision as of 19:41, 12 May 2012
Line 5: Line 5:
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|Many to Many]] and [[Vendor library|One to Many]] and [[Semantic versioning|Few to Many]] cases. However, without having [[experience]] with the [[Modular library|Many to Many]] case, they fallback to most obvious solution: Use of [[abstract class]]s. While extending [[abstract class]]es with new methods is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|Many to Many]] and [[Vendor library|One to Many]] and [[Semantic versioning|Few to Many]] cases. However, without having [[experience]] with the [[Modular library|Many to Many]] case, they fallback to most obvious solution: Use of [[abstract class]]s. While extending [[abstract class]]es with new methods is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
-
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distant]]. Then the best thing to do is to accept the design style suitable for [[modular library]].
+
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around than to admit they are [[proximity|distant]]. Then the best thing to do is to accept the design style suitable for [[modular library]].

JaroslavTulach at 19:37, 12 May 2012 - 2012-05-12 19:37:21

←Older revision Revision as of 19:37, 12 May 2012
Line 3: Line 3:
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
-
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use of ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
+
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|Many to Many]] and [[Vendor library|One to Many]] and [[Semantic versioning|Few to Many]] cases. However, without having [[experience]] with the [[Modular library|Many to Many]] case, they fallback to most obvious solution: Use of [[abstract class]]s. While extending [[abstract class]]es with new methods is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
-
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distant]]. Then one has to accept the design style suitable for [[modular library]].
+
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distant]]. Then the best thing to do is to accept the design style suitable for [[modular library]].

JaroslavTulach at 19:25, 12 May 2012 - 2012-05-12 19:25:02

←Older revision Revision as of 19:25, 12 May 2012
Line 1: Line 1:
-
In some cases one needs to have multiple [[ProviderAPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work.
+
In some cases one needs to have multiple [[ProviderAPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work and even [[semantic versioning]] may be too restricting.
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].

JaroslavTulach at 21:36, 8 May 2012 - 2012-05-08 21:36:50

←Older revision Revision as of 21:36, 8 May 2012
Line 5: Line 5:
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use of ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use of ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
-
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then one has to accept design style suitable for [[modular library]]. As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library|M-N]] style all the time?
+
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distant]]. Then one has to accept the design style suitable for [[modular library]].

JaroslavTulach at 21:34, 8 May 2012 - 2012-05-08 21:34:24

←Older revision Revision as of 21:34, 8 May 2012
Line 3: Line 3:
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
-
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
+
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use of ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then one has to accept design style suitable for [[modular library]]. As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library|M-N]] style all the time?
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then one has to accept design style suitable for [[modular library]]. As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library|M-N]] style all the time?

JaroslavTulach at 21:31, 8 May 2012 - 2012-05-08 21:31:40

←Older revision Revision as of 21:31, 8 May 2012
Line 1: Line 1:
In some cases one needs to have multiple [[ProviderAPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work.
In some cases one needs to have multiple [[ProviderAPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work.
-
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proxymity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
+
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
-
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then one has to accept design style suitable for [[modular libraries]]. As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library]] style all the time?
+
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then one has to accept design style suitable for [[modular library]]. As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library|M-N]] style all the time?

JaroslavTulach at 21:29, 8 May 2012 - 2012-05-08 21:29:27

←Older revision Revision as of 21:29, 8 May 2012
Line 1: Line 1:
-
In some cases one needs to have multiple [[ProviderSPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work.
+
In some cases one needs to have multiple [[ProviderAPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work.
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proxymity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proxymity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].

JaroslavTulach at 21:26, 8 May 2012 - 2012-05-08 21:26:17

←Older revision Revision as of 21:26, 8 May 2012
Line 1: Line 1:
-
In contrast to [[simple library]], the modular [[library]] is ready for being extended. It contains [[API]], but often it requires (or allows) someone else to provide useful implementation. Classical example can be {{JDK|javax/xml/parsers|DocumentBuilderFactory}} which just defines the [[API]] but allows others to plug in various implementations of the [[XML]] parsers (and requires at least one provider to be present).
+
In some cases one needs to have multiple [[ProviderSPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work.
 +
 
 +
In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proxymity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].
 +
 
 +
As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).
 +
 
 +
Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then one has to accept design style suitable for [[modular libraries]]. As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library]] style all the time?

JaroslavTulach at 22:19, 24 April 2012 - 2012-04-24 22:19:11

←Older revision Revision as of 22:19, 24 April 2012
Line 1: Line 1:
-
In contrast to [[simple library]], the modular [[library]] is ready for being extended. It contains [[API]], but often it requires (or allows) someone else to provide useful implementation. Classical example can be javax.xml.DocumentBuilderFactory which just defines the [[API]] but allows others to plug in various implementations of the [[XML]] parsers (and requires at least one provider to be present).
+
In contrast to [[simple library]], the modular [[library]] is ready for being extended. It contains [[API]], but often it requires (or allows) someone else to provide useful implementation. Classical example can be {{JDK|javax/xml/parsers|DocumentBuilderFactory}} which just defines the [[API]] but allows others to plug in various implementations of the [[XML]] parsers (and requires at least one provider to be present).