introduce constraint class