My thoughts:
A "Bar", as represented in your domain, has all of the things that may be needed in either place: name, address, URL, logo, slogan, and "distance" (I'm guessing from the requester's location). Therefore, in your domain, there should be one "Bar" class that is the authoritative source of data for one bar, no matter where the data will be used later. This class should be mutable, so that changes to the bar's data can be made and saved when necessary.
However, you have two places in which this Bar object's data is needed, and both of them only need a subset (and you don't want that data to be changed). The usual answer is a "data transfer object" or DTO; a POJO (plain ol' Java object) containing the immutable property getters. These DTOs can be produced by calling a method on the main Bar domain object: "toScenario1DTO()" and "toScenario2DTO()"; the results being a hydrated DTO (meaning that you only need to use the long, complicated constructor in one place).
If you ever needed to send data back to the main domain class (to update it; what's the point of data if you can't change it as needed to reflect the current state of the real world?), you could construct one of the DTOs, or use a new mutable DTO, and hand it back to the Bar class using an "updateFromDto()" method.
EDIT: to provide an example:
public class Bar {
private String name;
private Address address;
private Distance distance;
private Url url;
private Image logo;
private string Slogan;
public OnlineBarDto ToOnlineDto()
{
return new OnlineBarDto(name, address, url, logo);
}
public PhysicalBarDto ToPhysicalDto()
{
return new PhysicalBarDto(name, address, distance, slogan);
}
public void UpdateFromDto(PhysicalBarDto dto)
{
//validation logic here, or mixed into assignments
name = dto.Name;
address = dto.Address;
distance = dto.Distance;
slogan = dto.Slogan;
}
public void UpdateFromDto(OnlineBarDto dto)
{
//Validate DTO fields before performing assignments
name = dto.Name;
address = dto.Address;
url= dto.Url;
logo = dto.Logo;
}
// getters/setters - As necessary within the model and data access layers;
// other classes can update the model using DTOs, forcing validation.
}
public class PhysicalBarDto
{
public final String Name;
public final Address Address;
public final Distance Distance;
public final String Slogan;
public PhysicalBarDto(string Name, Address address, Distance distance, string slogan)
{ //set instance fields using parameter fields; you know the drill }
}
public class OnlineBarDto
{
public final String Name;
public final Address Address;
public final Image Logo;
public final Url Url;
public OnlineBarDto(string Name, Address address, Url url, Image logo)
{ //ditto }
}
The Address, Distance and Url classes should either be immutable themselves, or when used in the DTOs they should be replaced with immutable counterparts.
Bar
as an identifier!You should only ask practical, answerable questions based on actual problems that you face.
and that's exactly what's happening here